{"Entry":{"collection":"sql","key":"call","name":"CALL","aliases":["call"],"metadata":{"aliases":["call"],"changed_in":[],"changes":[{"from":"10","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":[],"removed":[]},"status":"added","synopsis":null,"to":"11"},{"from":"11","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["notes"],"removed":[]},"status":"changed","synopsis":null,"to":"12"},{"from":"13","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["parameters","notes","compatibility"],"removed":[]},"status":"changed","synopsis":null,"to":"14"},{"from":"16","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["notes"],"removed":[]},"status":"changed","synopsis":null,"to":"17"}],"content_hash":"e0d48a023a2747676b98f7eb776aac40713f7bc6989969cae62b8ebdb2df8ebb","editorial":{},"first_version":"11","group":"routine","imported_at":"2026-09-30T17:43:36.962955+08:00","last_version":"20","name":"CALL","object":"","position":2000,"present_in":["11","12","13","14","15","16","17","18","19","20"],"purpose":"invoke a procedure","purpose_zh":"","related":["create-procedure"],"slug":"call","source_rev":"a709ab85","synopsis":"CALL name ( [ argument ] [, ...] )","verb":"CALL"}},"Definition":{"Collection":"sql","Key":"call","SourceDatabase":"center","Version":"18","SourceTable":"sqlcmd","SourceKey":"call","SourceRevision":"a709ab85","Facts":{"anchor":"SQL-CALL","file":"sql-call.html","lang":"en","name":"CALL","purpose":"invoke a procedure","purpose_zh":"","related":["create-procedure"],"sections":[{"html":"\u003cp\u003e\u003ccode class=\"command\"\u003eCALL\u003c/code\u003e executes a procedure.\u003c/p\u003e\u003cp\u003eIf the procedure has any output parameters, then a result row will be returned, containing the values of those parameters.\u003c/p\u003e","key":"description","title":"Description"},{"html":"\u003cdiv class=\"variablelist\"\u003e\u003cdl class=\"variablelist\"\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe name (optionally schema-qualified) of the procedure.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eargument\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eAn argument expression for the procedure call.\u003c/p\u003e\u003cp\u003eArguments can include parameter names, using the syntax \u003ccode class=\"literal\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e =\u0026gt; \u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e. This works the same as in ordinary function calls; see \u003ca href=\"/docs/18/sql-syntax-calling-funcs.html\" title=\"4.3. Calling Functions\"\u003eSection 4.3\u003c/a\u003e for details.\u003c/p\u003e\u003cp\u003eArguments must be supplied for all procedure parameters that lack defaults, including \u003ccode class=\"literal\"\u003eOUT\u003c/code\u003e parameters. However, arguments matching \u003ccode class=\"literal\"\u003eOUT\u003c/code\u003e parameters are not evaluated, so it's customary to just write \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e for them. (Writing something else for an \u003ccode class=\"literal\"\u003eOUT\u003c/code\u003e parameter might cause compatibility problems with future \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e versions.)\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e","key":"parameters","title":"Parameters"},{"html":"\u003cp\u003eThe user must have \u003ccode class=\"literal\"\u003eEXECUTE\u003c/code\u003e privilege on the procedure in order to be allowed to invoke it.\u003c/p\u003e\u003cp\u003eTo call a function (not a procedure), use \u003ccode class=\"command\"\u003eSELECT\u003c/code\u003e instead.\u003c/p\u003e\u003cp\u003eIf \u003ccode class=\"command\"\u003eCALL\u003c/code\u003e is executed in a transaction block, then the called procedure cannot execute transaction control statements. Transaction control statements are only allowed if \u003ccode class=\"command\"\u003eCALL\u003c/code\u003e is executed in its own transaction.\u003c/p\u003e\u003cp\u003e\u003cspan class=\"application\"\u003ePL/pgSQL\u003c/span\u003e handles output parameters in \u003ccode class=\"command\"\u003eCALL\u003c/code\u003e commands differently; see \u003ca href=\"/docs/18/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-CALLING-PROCEDURE\" title=\"41.6.3. Calling a Procedure\"\u003eSection 41.6.3\u003c/a\u003e.\u003c/p\u003e","key":"notes","title":"Notes"},{"html":"\u003cpre class=\"programlisting\"\u003eCALL do_db_maintenance();\n\u003c/pre\u003e","key":"examples","title":"Examples"},{"html":"\u003cp\u003e\u003ccode class=\"command\"\u003eCALL\u003c/code\u003e conforms to the SQL standard, except for the handling of output parameters. The standard says that users should write variables to receive the values of output parameters.\u003c/p\u003e","key":"compatibility","title":"Compatibility"},{"html":"\u003cspan class=\"simplelist\"\u003e\u003ca href=\"/wiki/sql/create-procedure/?v=18\" title=\"CREATE PROCEDURE\"\u003e\u003cspan class=\"refentrytitle\"\u003eCREATE PROCEDURE\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e","key":"see_also","title":"See Also"}],"sections_same_as":"","slug":"18","synopsis_html":"CALL \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e ( [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargument\u003c/code\u003e\u003c/em\u003e ] [, ...] )","synopsis_text":"CALL name ( [ argument ] [, ...] )"},"ManualEvidence":{},"MeasuredEvidence":{}},"Text":{"Collection":"sql","Key":"call","SourceDatabase":"pgweb","Version":"18","Locale":"zh-Hans","Title":"CALL","Summary":"调用一个过程","BodyHTML":"\u003cpre\u003eCALL name ( [ argument ] [, ...] )\u003c/pre\u003e\u003csection\u003e\u003ch2\u003e描述\u003c/h2\u003e\u003cp\u003e\u003ccode\u003eCALL\u003c/code\u003e执行一个过程。\u003c/p\u003e\u003cp\u003e如果该过程有任何输出参数，则会返回一行结果，其中包含这些参数的值。\u003c/p\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e参数\u003c/h2\u003e\u003cdiv\u003e\u003cdl\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e过程的名称（可以是模式限定的）。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003eargument\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e过程调用的参数表达式。\u003c/p\u003e\u003cp\u003e参数中可以包含参数名，使用语法 \u003ccode\u003e\u003cem\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e =\u0026gt; \u003cem\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e。这与普通函数调用中的工作方式相同；详见\u003ca href=\"/docs/18/sql-syntax-calling-funcs.html\" rel=\"nofollow\"\u003e第 4.3 节\u003c/a\u003e。\u003c/p\u003e\u003cp\u003e对于所有没有默认值的过程参数，都必须提供参数，包括\u003ccode\u003eOUT\u003c/code\u003e参数。不过，与\u003ccode\u003eOUT\u003c/code\u003e参数匹配的实参不会被求值，因此通常只需写成\u003ccode\u003eNULL\u003c/code\u003e。（如果为\u003ccode\u003eOUT\u003c/code\u003e参数写入其他内容，可能会与未来的\u003cspan\u003ePostgreSQL\u003c/span\u003e版本产生兼容性问题。）\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e注解\u003c/h2\u003e\u003cp\u003e用户必须拥有该过程的\u003ccode\u003eEXECUTE\u003c/code\u003e权限，才能调用它。\u003c/p\u003e\u003cp\u003e若要调用函数（而不是过程），请改用\u003ccode\u003eSELECT\u003c/code\u003e。\u003c/p\u003e\u003cp\u003e如果在事务块中执行\u003ccode\u003eCALL\u003c/code\u003e，则被调用的过程不能执行事务控制语句。只有当\u003ccode\u003eCALL\u003c/code\u003e作为独立事务执行时，才允许使用事务控制语句。\u003c/p\u003e\u003cp\u003e\u003cspan\u003ePL/pgSQL\u003c/span\u003e对\u003ccode\u003eCALL\u003c/code\u003e命令中的输出参数采用不同的处理方式；参见\u003ca href=\"/docs/18/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-CALLING-PROCEDURE\" rel=\"nofollow\"\u003e第 41.6.3 节\u003c/a\u003e。\u003c/p\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e示例\u003c/h2\u003e\u003cpre\u003eCALL do_db_maintenance();\n\u003c/pre\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e兼容性\u003c/h2\u003e\u003cp\u003e\u003ccode\u003eCALL\u003c/code\u003e符合 SQL 标准，但对输出参数的处理除外。标准规定用户应写变量来接收输出参数的值。\u003c/p\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e另见\u003c/h2\u003e\u003cspan\u003e\u003ca href=\"/wiki/sql/create-procedure/?v=18\" title=\"CREATE PROCEDURE\" rel=\"nofollow\"\u003e\u003cspan\u003eCREATE PROCEDURE\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e\u003c/section\u003e","SourceRevision":"1b5ca64c","ContentHash":"e6b117390e8bed44665869453c85bbf2691b86107313bbd117245dd00cc6a824","Payload":{"purpose_zh":"调用一个过程","sections":[{"html":"\u003cp\u003e\u003ccode class=\"command\"\u003eCALL\u003c/code\u003e执行一个过程。\u003c/p\u003e\u003cp\u003e如果该过程有任何输出参数，则会返回一行结果，其中包含这些参数的值。\u003c/p\u003e","key":"description","title":"描述"},{"html":"\u003cdiv class=\"variablelist\"\u003e\u003cdl class=\"variablelist\"\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e过程的名称（可以是模式限定的）。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eargument\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e过程调用的参数表达式。\u003c/p\u003e\u003cp\u003e参数中可以包含参数名，使用语法 \u003ccode class=\"literal\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e =\u0026gt; \u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e。这与普通函数调用中的工作方式相同；详见\u003ca href=\"/docs/18/sql-syntax-calling-funcs.html\" title=\"4.3. 调用函数\"\u003e第 4.3 节\u003c/a\u003e。\u003c/p\u003e\u003cp\u003e对于所有没有默认值的过程参数，都必须提供参数，包括\u003ccode class=\"literal\"\u003eOUT\u003c/code\u003e参数。不过，与\u003ccode class=\"literal\"\u003eOUT\u003c/code\u003e参数匹配的实参不会被求值，因此通常只需写成\u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e。（如果为\u003ccode class=\"literal\"\u003eOUT\u003c/code\u003e参数写入其他内容，可能会与未来的\u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e版本产生兼容性问题。）\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e","key":"parameters","title":"参数"},{"html":"\u003cp\u003e用户必须拥有该过程的\u003ccode class=\"literal\"\u003eEXECUTE\u003c/code\u003e权限，才能调用它。\u003c/p\u003e\u003cp\u003e若要调用函数（而不是过程），请改用\u003ccode class=\"command\"\u003eSELECT\u003c/code\u003e。\u003c/p\u003e\u003cp\u003e如果在事务块中执行\u003ccode class=\"command\"\u003eCALL\u003c/code\u003e，则被调用的过程不能执行事务控制语句。只有当\u003ccode class=\"command\"\u003eCALL\u003c/code\u003e作为独立事务执行时，才允许使用事务控制语句。\u003c/p\u003e\u003cp\u003e\u003cspan class=\"application\"\u003ePL/pgSQL\u003c/span\u003e对\u003ccode class=\"command\"\u003eCALL\u003c/code\u003e命令中的输出参数采用不同的处理方式；参见\u003ca href=\"/docs/18/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-CALLING-PROCEDURE\" title=\"41.6.3. 调用过程\"\u003e第 41.6.3 节\u003c/a\u003e。\u003c/p\u003e","key":"notes","title":"注解"},{"html":"\u003cpre class=\"programlisting\"\u003eCALL do_db_maintenance();\n\u003c/pre\u003e","key":"examples","title":"示例"},{"html":"\u003cp\u003e\u003ccode class=\"command\"\u003eCALL\u003c/code\u003e符合 SQL 标准，但对输出参数的处理除外。标准规定用户应写变量来接收输出参数的值。\u003c/p\u003e","key":"compatibility","title":"兼容性"},{"html":"\u003cspan class=\"simplelist\"\u003e\u003ca href=\"/wiki/sql/create-procedure/?v=18\" title=\"CREATE PROCEDURE\"\u003e\u003cspan class=\"refentrytitle\"\u003eCREATE PROCEDURE\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e","key":"see_also","title":"另见"}],"sections_same_as":"","synopsis_html":"CALL \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e ( [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargument\u003c/code\u003e\u003c/em\u003e ] [, ...] )","synopsis_text":"CALL name ( [ argument ] [, ...] )"}},"RequestedLocale":"zh-Hans","Fallback":false,"Versions":["11","12","13","14","15","16","17","18","19","20"],"Locales":["en","zh-Hans"],"Signatures":null,"Spellings":null,"SQLState":null,"Evidence":null}
