Hi!

EXECUTE PROCEDURE is full of weirdness, so I propose that standard SQL
CALL is adapted for our needs.

EXECUTE PROCEDURE [ <package> . ] <name>
    [ <value list> | ( <value list> ) ]
    [ RETURNING_VALUES <variable list> |
      RETURNING_VALUES ( <variable list> ) ]

It does not allow one to "select" what just it wants.

So if one changes the procedure output parameters, clients (DSQL and
PSQL) needs to be changed. It's like "SELECT *" which is sure a bad
practice.

It has this weird RETURNING_VALUES and multiple syntax about parenthesis.

It does not allow to just execute and ignore output parameters.

I propose that CALL syntax:

CALL [ <package> . ] <name> ( <value list> )
    [ RETURNING { * | <value list> } ]
    [ INTO <variable list> ]

A CALL without RETURNING and without INTO will execute the procedure and
ignore possible output parameters.

A CALL without RETURNING and with INTO (PSQL only), works like with
"RETURNING *" and EXECUTE PROCEDURE ... RETURNING_VALUES.

Examples:

-- Like EXECUTE PROCEDURE in PSQL
CALL proc(1, 2) INTO v1, v2

-- Can ignore some output parameters in PSQL
CALL proc(1, 2) RETURNING o1 INTO a1

-- Can ignore some output parameters in DSQL
CALL proc(1, 2) RETURNING o1

-- Ignore all output parameters in DSQL and PSQL
CALL proc(1, 2)


Adriano


Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to