mirror of
https://github.com/postgres/postgres.git
synced 2025-11-22 12:22:45 +03:00
Support for OUT parameters in procedures
Unlike for functions, OUT parameters for procedures are part of the signature. Therefore, they have to be listed in pg_proc.proargtypes as well as mentioned in ALTER PROCEDURE and DROP PROCEDURE. Reviewed-by: Andrew Dunstan <andrew.dunstan@2ndquadrant.com> Reviewed-by: Pavel Stehule <pavel.stehule@gmail.com> Discussion: https://www.postgresql.org/message-id/flat/2b8490fe-51af-e671-c504-47359dc453c5@2ndquadrant.com
This commit is contained in:
@@ -249,6 +249,9 @@ ProcedureCreate(const char *procedureName,
|
||||
elog(ERROR, "variadic parameter must be last");
|
||||
break;
|
||||
case PROARGMODE_OUT:
|
||||
if (OidIsValid(variadicType) && prokind == PROKIND_PROCEDURE)
|
||||
elog(ERROR, "variadic parameter must be last");
|
||||
break;
|
||||
case PROARGMODE_TABLE:
|
||||
/* okay */
|
||||
break;
|
||||
@@ -462,10 +465,12 @@ ProcedureCreate(const char *procedureName,
|
||||
if (isnull)
|
||||
proargmodes = PointerGetDatum(NULL); /* just to be sure */
|
||||
|
||||
n_old_arg_names = get_func_input_arg_names(proargnames,
|
||||
n_old_arg_names = get_func_input_arg_names(prokind,
|
||||
proargnames,
|
||||
proargmodes,
|
||||
&old_arg_names);
|
||||
n_new_arg_names = get_func_input_arg_names(parameterNames,
|
||||
n_new_arg_names = get_func_input_arg_names(prokind,
|
||||
parameterNames,
|
||||
parameterModes,
|
||||
&new_arg_names);
|
||||
for (j = 0; j < n_old_arg_names; j++)
|
||||
|
||||
Reference in New Issue
Block a user