"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