Shawn,
 
Thank you for your reply.
 
It looks like this is the only option.  But i was trying to avoid the
creation of temp table and parsing of data at the application layer
since it can potentially slow down the overall performance.
 
Dinesh

________________________________

From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
Sent: Thursday, April 07, 2005 4:03 PM
To: Anchan, Dinesh
Cc: mysql@lists.mysql.com; [EMAIL PROTECTED]
Subject: RE: Need help in Stored procedures and functions




"Anchan, Dinesh" <[EMAIL PROTECTED]> wrote on 04/07/2005
03:44:07 PM:

> Peter,
>  
> Thank you for your reply.  
>  
> Actually that request was accidentally sent to mysql@lists.mysql.com
> instead of [EMAIL PROTECTED]  
>  
> MySQL support also suggested the same thing.  Problem is, values in
the
> OUT variable can be retrieved only from a future SQL query.  But we
are
> trying to call this procedure from a C program.   C Program can parse
> the result set if it is an output from a simple SELECT statement.  I
am
> finding it difficult achieve something like below:
>  
> Here is a sample of informix function:
>  
> Create function test()
> Returning integer, smallint, char(1), varchar(65);
> 
> Foreach
> 
>     select col1, col2
>     into p_col1, p_col2
>     from table1
>    where <where_clause>
> 
>    foreach
> 
>       select col1, col2, col3, col4
>         into i_col1, i_col2, i_col3, i_col4
>         from table2
>        where i_col1 = p_col1
>          and i_col2 = p_col2
> 
>       if p_col3 = <some_thing> then
>          do_some_calculations;
>          let p_string1 = <some_thing>
>       end if;
> 
>       if p_col4 = <some_thing> then
>          do_some_calculations;
>          let p_string2 = <some_thing>;
>       end if;
> 
>       return i_col3, i_col4, p_string1, p_string2 with resume;
> 
>    end foreach
> 
> End foreach
> 
> End function;
> 
> Thank you for your help
> 
> Dinesh
> 
> 
> ________________________________
> 
> From: Peter Brawley [mailto:[EMAIL PROTECTED] 
> Sent: Thursday, April 07, 2005 12:24 PM
> To: Anchan, Dinesh
> Cc: mysql@lists.mysql.com
> Subject: Re: Need help in Stored procedures and functions
> 
> 
> Dinesh,
> 
> A stored func returns a scalar. To return multiple values, use an
sproc
> declaring the INOUT variables you need, & pick up their values in the
> calling code after the sproc has executed.
> 
> Peter Brawley
> http://www.artfulsoftware.com
> 
> -----
> 
> Anchan, Dinesh wrote: 
> 
>    Hi,
>     
>    I am trying to write a function which returns multiple values.
> I don't know if this is allowed or not but i am not able to create
this
> function.  I get the following error:
>     
>    ERROR 1064 (42000): You have an error in your SQL syntax; check
> the manual that corresponds to your MySQL server version for the right
> syntax to use near '     
>       integer,
>       integer,                  ' at line 7
>    
>    I have attached the function i am trying to create.  Please
> refer to the attached thread for contract related information.
>     
>    I would appreciate if somebody can give me a call so that i can
> clear few other questions.
>     
>    Thanks
>    Dinesh Anchan
> 
> 

I don't speak Informix (and I haven't used MySQL's sprocs yet) but it
seems as though you are looping through the JOIN of one table against
another and returning a row of calculated information for each
JOINed-row combination.  Could you possibly perform your calculations
and accumulate your return values in a temporary table (I suggest a
temporary table because it is connection-specific) then return your
results at the end of the statement with a simple SELECT from the temp
table? 

If all of the values you need to return are in variables, you should be
able to simulate a single row table by saying 

SELECT variable1 as variable1name, variable2 as variable2name, ...; 

You shouldn't need a FROM clause because you are only SELECTing
constants. 

Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine 



Reply via email to