{"Entry":{"collection":"sql","key":"alter-procedure","name":"ALTER PROCEDURE","aliases":["alterprocedure"],"metadata":{"aliases":["alterprocedure"],"changed_in":["13","14"],"changes":[{"from":"10","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":[],"removed":[]},"status":"added","synopsis":null,"to":"11"},{"from":"12","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["parameters"],"removed":[]},"status":"changed","synopsis":{"added":["[ NO ] DEPENDS ON EXTENSION extension_name"],"removed":[]},"to":"13"},{"from":"13","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["parameters"],"removed":[]},"status":"changed","synopsis":{"added":["OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }"],"removed":[]},"to":"14"},{"from":"15","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description"],"removed":[]},"status":"changed","synopsis":null,"to":"16"},{"from":"16","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["parameters"],"removed":[]},"status":"changed","synopsis":null,"to":"17"}],"content_hash":"d3a6f687a5d272422c0c801dcc33fc7684c41b2c3275bd06aec188b422b19814","editorial":{},"first_version":"11","group":"routine","imported_at":"2026-09-30T17:43:37.291195+08:00","last_version":"20","name":"ALTER PROCEDURE","object":"PROCEDURE","position":2012,"present_in":["11","12","13","14","15","16","17","18","19","20"],"purpose":"change the definition of a procedure","purpose_zh":"","related":["create-procedure","drop-procedure","alter-function","alter-routine"],"slug":"alter-procedure","source_rev":"a709ab85","synopsis":"ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\naction [ ... ] [ RESTRICT ]\nALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\nRENAME TO new_name\nALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\nOWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\nALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\nSET SCHEMA new_schema\nALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\n[ NO ] DEPENDS ON EXTENSION extension_name\nwhere action is one of:\n\n[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER\nSET configuration_parameter { TO | = } { value | DEFAULT }\nSET configuration_parameter FROM CURRENT\nRESET configuration_parameter\nRESET ALL","verb":"ALTER"}},"Definition":{"Collection":"sql","Key":"alter-procedure","SourceDatabase":"center","Version":"18","SourceTable":"sqlcmd","SourceKey":"alter-procedure","SourceRevision":"a709ab85","Facts":{"anchor":"SQL-ALTERPROCEDURE","file":"sql-alterprocedure.html","lang":"en","name":"ALTER PROCEDURE","purpose":"change the definition of a procedure","purpose_zh":"","related":["create-procedure","drop-procedure","alter-function","alter-routine"],"sections":[{"html":"\u003cp\u003e\u003ccode class=\"command\"\u003eALTER PROCEDURE\u003c/code\u003e changes the definition of a procedure.\u003c/p\u003e\u003cp\u003eYou must own the procedure to use \u003ccode class=\"command\"\u003eALTER PROCEDURE\u003c/code\u003e. To change a procedure's schema, you must also have \u003ccode class=\"literal\"\u003eCREATE\u003c/code\u003e privilege on the new schema. To alter the owner, you must be able to \u003ccode class=\"literal\"\u003eSET ROLE\u003c/code\u003e to the new owning role, and that role must have \u003ccode class=\"literal\"\u003eCREATE\u003c/code\u003e privilege on the procedure's schema. (These restrictions enforce that altering the owner doesn't do anything you couldn't do by dropping and recreating the procedure. However, a superuser can alter ownership of any procedure anyway.)\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 an existing procedure. If no argument list is specified, the name must be unique in its schema.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe mode of an argument: \u003ccode class=\"literal\"\u003eIN\u003c/code\u003e, \u003ccode class=\"literal\"\u003eOUT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eINOUT\u003c/code\u003e, or \u003ccode class=\"literal\"\u003eVARIADIC\u003c/code\u003e. If omitted, the default is \u003ccode class=\"literal\"\u003eIN\u003c/code\u003e.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe name of an argument. Note that \u003ccode class=\"command\"\u003eALTER PROCEDURE\u003c/code\u003e does not actually pay any attention to argument names, since only the argument data types are used to determine the procedure's identity.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe data type(s) of the procedure's arguments (optionally schema-qualified), if any. See \u003ca href=\"/docs/18/sql-dropprocedure.html\" title=\"DROP PROCEDURE\"\u003e\u003cspan class=\"refentrytitle\"\u003eDROP PROCEDURE\u003c/span\u003e\u003c/a\u003e for the details of how the procedure is looked up using the argument data type(s).\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe new name of the procedure.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_owner\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe new owner of the procedure. Note that if the procedure is marked \u003ccode class=\"literal\"\u003eSECURITY DEFINER\u003c/code\u003e, it will subsequently execute as the new owner.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_schema\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe new schema for the procedure.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eextension_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form marks the procedure as dependent on the extension, or no longer dependent on the extension if \u003ccode class=\"literal\"\u003eNO\u003c/code\u003e is specified. A procedure that's marked as dependent on an extension is dropped when the extension is dropped, even if cascade is not specified. A procedure can depend upon multiple extensions, and will be dropped when any one of those extensions is dropped.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003e[ \u003cspan class=\"optional\"\u003eEXTERNAL\u003c/span\u003e ] SECURITY INVOKER\u003c/code\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003e[ \u003cspan class=\"optional\"\u003eEXTERNAL\u003c/span\u003e ] SECURITY DEFINER\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eChange whether the procedure is a security definer or not. The key word \u003ccode class=\"literal\"\u003eEXTERNAL\u003c/code\u003e is ignored for SQL conformance. See \u003ca href=\"/docs/18/sql-createprocedure.html\" title=\"CREATE PROCEDURE\"\u003e\u003cspan class=\"refentrytitle\"\u003eCREATE PROCEDURE\u003c/span\u003e\u003c/a\u003e for more information about this capability.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003econfiguration_parameter\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eAdd or change the assignment to be made to a configuration parameter when the procedure is called. If \u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e is \u003ccode class=\"literal\"\u003eDEFAULT\u003c/code\u003e or, equivalently, \u003ccode class=\"literal\"\u003eRESET\u003c/code\u003e is used, the procedure-local setting is removed, so that the procedure executes with the value present in its environment. Use \u003ccode class=\"literal\"\u003eRESET ALL\u003c/code\u003e to clear all procedure-local settings. \u003ccode class=\"literal\"\u003eSET FROM CURRENT\u003c/code\u003e saves the value of the parameter that is current when \u003ccode class=\"command\"\u003eALTER PROCEDURE\u003c/code\u003e is executed as the value to be applied when the procedure is entered.\u003c/p\u003e\u003cp\u003eSee \u003ca href=\"/docs/18/sql-set.html\" title=\"SET\"\u003e\u003cspan class=\"refentrytitle\"\u003eSET\u003c/span\u003e\u003c/a\u003e and \u003ca href=\"/docs/18/runtime-config.html\" title=\"Chapter 19. Server Configuration\"\u003eChapter 19\u003c/a\u003e for more information about allowed parameter names and values.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eRESTRICT\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eIgnored for conformance with the SQL standard.\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e","key":"parameters","title":"Parameters"},{"html":"\u003cp\u003eTo rename the procedure \u003ccode class=\"literal\"\u003einsert_data\u003c/code\u003e with two arguments of type \u003ccode class=\"type\"\u003einteger\u003c/code\u003e to \u003ccode class=\"literal\"\u003einsert_record\u003c/code\u003e:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER PROCEDURE insert_data(integer, integer) RENAME TO insert_record;\n\u003c/pre\u003e\u003cp\u003eTo change the owner of the procedure \u003ccode class=\"literal\"\u003einsert_data\u003c/code\u003e with two arguments of type \u003ccode class=\"type\"\u003einteger\u003c/code\u003e to \u003ccode class=\"literal\"\u003ejoe\u003c/code\u003e:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER PROCEDURE insert_data(integer, integer) OWNER TO joe;\n\u003c/pre\u003e\u003cp\u003eTo change the schema of the procedure \u003ccode class=\"literal\"\u003einsert_data\u003c/code\u003e with two arguments of type \u003ccode class=\"type\"\u003einteger\u003c/code\u003e to \u003ccode class=\"literal\"\u003eaccounting\u003c/code\u003e:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER PROCEDURE insert_data(integer, integer) SET SCHEMA accounting;\n\u003c/pre\u003e\u003cp\u003eTo mark the procedure \u003ccode class=\"literal\"\u003einsert_data(integer, integer)\u003c/code\u003e as being dependent on the extension \u003ccode class=\"literal\"\u003emyext\u003c/code\u003e:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER PROCEDURE insert_data(integer, integer) DEPENDS ON EXTENSION myext;\n\u003c/pre\u003e\u003cp\u003eTo adjust the search path that is automatically set for a procedure:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER PROCEDURE check_password(text) SET search_path = admin, pg_temp;\n\u003c/pre\u003e\u003cp\u003eTo disable automatic setting of \u003ccode class=\"varname\"\u003esearch_path\u003c/code\u003e for a procedure:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER PROCEDURE check_password(text) RESET search_path;\n\u003c/pre\u003e\u003cp\u003eThe procedure will now execute with whatever search path is used by its caller.\u003c/p\u003e","key":"examples","title":"Examples"},{"html":"\u003cp\u003eThis statement is partially compatible with the \u003ccode class=\"command\"\u003eALTER PROCEDURE\u003c/code\u003e statement in the SQL standard. The standard allows more properties of a procedure to be modified, but does not provide the ability to rename a procedure, make a procedure a security definer, attach configuration parameter values to a procedure, or change the owner, schema, or volatility of a procedure. The standard also requires the \u003ccode class=\"literal\"\u003eRESTRICT\u003c/code\u003e key word, which is optional in \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e.\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, \u003ca href=\"/wiki/sql/drop-procedure/?v=18\" title=\"DROP PROCEDURE\"\u003e\u003cspan class=\"refentrytitle\"\u003eDROP PROCEDURE\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/alter-function/?v=18\" title=\"ALTER FUNCTION\"\u003e\u003cspan class=\"refentrytitle\"\u003eALTER FUNCTION\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/alter-routine/?v=18\" title=\"ALTER ROUTINE\"\u003e\u003cspan class=\"refentrytitle\"\u003eALTER ROUTINE\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e","key":"see_also","title":"See Also"}],"sections_same_as":"","slug":"18","synopsis_html":"ALTER PROCEDURE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e [ ( [ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [, ...] ] ) ]\n    \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaction\u003c/code\u003e\u003c/em\u003e [ ... ] [ RESTRICT ]\nALTER PROCEDURE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e [ ( [ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [, ...] ] ) ]\n    RENAME TO \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_name\u003c/code\u003e\u003c/em\u003e\nALTER PROCEDURE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e [ ( [ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [, ...] ] ) ]\n    OWNER TO { \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_owner\u003c/code\u003e\u003c/em\u003e | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\nALTER PROCEDURE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e [ ( [ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [, ...] ] ) ]\n    SET SCHEMA \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_schema\u003c/code\u003e\u003c/em\u003e\nALTER PROCEDURE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e [ ( [ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [, ...] ] ) ]\n    [ NO ] DEPENDS ON EXTENSION \u003cem class=\"replaceable\"\u003e\u003ccode\u003eextension_name\u003c/code\u003e\u003c/em\u003e\n\n\u003cspan class=\"phrase\"\u003ewhere \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaction\u003c/code\u003e\u003c/em\u003e is one of:\u003c/span\u003e\n\n    [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER\n    SET \u003cem class=\"replaceable\"\u003e\u003ccode\u003econfiguration_parameter\u003c/code\u003e\u003c/em\u003e { TO | = } { \u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e | DEFAULT }\n    SET \u003cem class=\"replaceable\"\u003e\u003ccode\u003econfiguration_parameter\u003c/code\u003e\u003c/em\u003e FROM CURRENT\n    RESET \u003cem class=\"replaceable\"\u003e\u003ccode\u003econfiguration_parameter\u003c/code\u003e\u003c/em\u003e\n    RESET ALL","synopsis_text":"ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\naction [ ... ] [ RESTRICT ]\nALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\nRENAME TO new_name\nALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\nOWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\nALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\nSET SCHEMA new_schema\nALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\n[ NO ] DEPENDS ON EXTENSION extension_name\nwhere action is one of:\n\n[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER\nSET configuration_parameter { TO | = } { value | DEFAULT }\nSET configuration_parameter FROM CURRENT\nRESET configuration_parameter\nRESET ALL"},"ManualEvidence":{},"MeasuredEvidence":{}},"Text":{"Collection":"sql","Key":"alter-procedure","SourceDatabase":"pgweb","Version":"18","Locale":"zh-Hans","Title":"ALTER PROCEDURE","Summary":"更改过程的定义","BodyHTML":"\u003cpre\u003eALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\naction [ ... ] [ RESTRICT ]\nALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\nRENAME TO new_name\nALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\nOWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\nALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\nSET SCHEMA new_schema\nALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\n[ NO ] DEPENDS ON EXTENSION extension_name\n其中 action 是以下之一：\n\n[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER\nSET configuration_parameter { TO | = } { value | DEFAULT }\nSET configuration_parameter FROM CURRENT\nRESET configuration_parameter\nRESET ALL\u003c/pre\u003e\u003csection\u003e\u003ch2\u003e描述\u003c/h2\u003e\u003cp\u003e\u003ccode\u003eALTER PROCEDURE\u003c/code\u003e更改过程的定义。\u003c/p\u003e\u003cp\u003e要使用\u003ccode\u003eALTER PROCEDURE\u003c/code\u003e，你必须拥有该过程。要更改过程的模式，你还必须在新模式上具有\u003ccode\u003eCREATE\u003c/code\u003e权限。要更改拥有者，你必须能够对新的拥有角色执行\u003ccode\u003eSET ROLE\u003c/code\u003e，并且该角色必须在过程所在模式上具有\u003ccode\u003eCREATE\u003c/code\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\u003eargmode\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e参数的模式：\u003ccode\u003eIN\u003c/code\u003e、\u003ccode\u003eOUT\u003c/code\u003e、\u003ccode\u003eINOUT\u003c/code\u003e或\u003ccode\u003eVARIADIC\u003c/code\u003e。如果省略，默认为\u003ccode\u003eIN\u003c/code\u003e。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e参数名称。注意，\u003ccode\u003eALTER PROCEDURE\u003c/code\u003e实际上并不关心参数名，因为确定过程标识时只使用参数数据类型。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e过程参数的数据类型（如果有，可带模式限定）。关于如何根据参数数据类型查找过程的详细信息，请参见\u003ca href=\"/docs/18/sql-dropprocedure.html\" title=\"DROP PROCEDURE\" rel=\"nofollow\"\u003e\u003cspan\u003eDROP PROCEDURE\u003c/span\u003e\u003c/a\u003e。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003enew_name\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\u003enew_owner\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该过程的新拥有者。注意，如果该过程被标记为\u003ccode\u003eSECURITY DEFINER\u003c/code\u003e，随后它将以新拥有者的身份执行。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003enew_schema\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\u003eextension_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这种形式将过程标记为依赖于该扩展；如果指定了 \u003ccode\u003eNO\u003c/code\u003e，则表示不再依赖该扩展。被标记为依赖扩展的过程会在扩展被删除时一并删除，即使没有指定 \u003ccode\u003eCASCADE\u003c/code\u003e也是如此。一个过程可以依赖多个扩展，其中任意一个扩展被删除时，该过程都会被删除。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003e[ \u003cspan\u003eEXTERNAL\u003c/span\u003e ] SECURITY INVOKER\u003c/code\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan\u003e\u003ccode\u003e[ \u003cspan\u003eEXTERNAL\u003c/span\u003e ] SECURITY DEFINER\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e更改该过程是否为安全性定义者。关键字\u003ccode\u003eEXTERNAL\u003c/code\u003e 为符合 SQL 标准而被忽略。关于这一能力的更多信息，参见\u003ca href=\"/docs/18/sql-createprocedure.html\" title=\"CREATE PROCEDURE\" rel=\"nofollow\"\u003e\u003cspan\u003eCREATE PROCEDURE\u003c/span\u003e\u003c/a\u003e。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003econfiguration_parameter\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e添加或更改在调用该过程时要赋给某个配置参数的值。如果 \u003cem\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e为\u003ccode\u003eDEFAULT\u003c/code\u003e，或者等效地使用了\u003ccode\u003eRESET\u003c/code\u003e，则会移除过程局部设置，这样该过程就会使用其环境中的值执行。使用 \u003ccode\u003eRESET ALL\u003c/code\u003e可以清除所有过程局部设置。\u003ccode\u003eSET FROM CURRENT\u003c/code\u003e会将执行 \u003ccode\u003eALTER PROCEDURE\u003c/code\u003e时该参数的当前值保存为进入该过程时要应用的值。\u003c/p\u003e\u003cp\u003e关于允许的参数名和值的更多信息，请参见\u003ca href=\"/docs/18/sql-set.html\" title=\"SET\" rel=\"nofollow\"\u003e\u003cspan\u003eSET\u003c/span\u003e\u003c/a\u003e和\u003ca href=\"/docs/18/runtime-config.html\" rel=\"nofollow\"\u003e第 19 章\u003c/a\u003e。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eRESTRICT\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e为符合 SQL 标准而被忽略。\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\u003einteger\u003c/code\u003e类型参数的过程 \u003ccode\u003einsert_data\u003c/code\u003e重命名为 \u003ccode\u003einsert_record\u003c/code\u003e：\u003c/p\u003e\u003cpre\u003eALTER PROCEDURE insert_data(integer, integer) RENAME TO insert_record;\n\u003c/pre\u003e\u003cp\u003e要将具有两个\u003ccode\u003einteger\u003c/code\u003e类型参数的过程 \u003ccode\u003einsert_data\u003c/code\u003e的拥有者改为 \u003ccode\u003ejoe\u003c/code\u003e：\u003c/p\u003e\u003cpre\u003eALTER PROCEDURE insert_data(integer, integer) OWNER TO joe;\n\u003c/pre\u003e\u003cp\u003e要将具有两个\u003ccode\u003einteger\u003c/code\u003e类型参数的过程 \u003ccode\u003einsert_data\u003c/code\u003e的模式改为 \u003ccode\u003eaccounting\u003c/code\u003e：\u003c/p\u003e\u003cpre\u003eALTER PROCEDURE insert_data(integer, integer) SET SCHEMA accounting;\n\u003c/pre\u003e\u003cp\u003e要将过程\u003ccode\u003einsert_data(integer, integer)\u003c/code\u003e标记为依赖于扩展\u003ccode\u003emyext\u003c/code\u003e：\u003c/p\u003e\u003cpre\u003eALTER PROCEDURE insert_data(integer, integer) DEPENDS ON EXTENSION myext;\n\u003c/pre\u003e\u003cp\u003e要调整会为过程自动设置的搜索路径：\u003c/p\u003e\u003cpre\u003eALTER PROCEDURE check_password(text) SET search_path = admin, pg_temp;\n\u003c/pre\u003e\u003cp\u003e要禁用过程的\u003ccode\u003esearch_path\u003c/code\u003e自动设置：\u003c/p\u003e\u003cpre\u003eALTER PROCEDURE check_password(text) RESET search_path;\n\u003c/pre\u003e\u003cp\u003e现在该过程将使用其调用者所使用的任何搜索路径执行。\u003c/p\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e兼容性\u003c/h2\u003e\u003cp\u003e该语句与 SQL 标准中的\u003ccode\u003eALTER PROCEDURE\u003c/code\u003e语句部分兼容。标准允许修改过程的更多属性，但不提供重命名过程、将过程设为安全性定义者、为过程附加配置参数值，或者更改过程的拥有者或模式的能力。标准还要求使用\u003ccode\u003eRESTRICT\u003c/code\u003e关键字，而它在\u003cspan\u003ePostgreSQL\u003c/span\u003e中是可选的。\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, \u003ca href=\"/wiki/sql/drop-procedure/?v=18\" title=\"DROP PROCEDURE\" rel=\"nofollow\"\u003e\u003cspan\u003eDROP PROCEDURE\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/alter-function/?v=18\" title=\"ALTER FUNCTION\" rel=\"nofollow\"\u003e\u003cspan\u003eALTER FUNCTION\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/alter-routine/?v=18\" title=\"ALTER ROUTINE\" rel=\"nofollow\"\u003e\u003cspan\u003eALTER ROUTINE\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e\u003c/section\u003e","SourceRevision":"1b5ca64c","ContentHash":"809d4c7fcbc1a03c89299f5205932b6ab8e9fcbb721046f6b0471bf04d5829bc","Payload":{"purpose_zh":"更改过程的定义","sections":[{"html":"\u003cp\u003e\u003ccode class=\"command\"\u003eALTER PROCEDURE\u003c/code\u003e更改过程的定义。\u003c/p\u003e\u003cp\u003e要使用\u003ccode class=\"command\"\u003eALTER PROCEDURE\u003c/code\u003e，你必须拥有该过程。要更改过程的模式，你还必须在新模式上具有\u003ccode class=\"literal\"\u003eCREATE\u003c/code\u003e权限。要更改拥有者，你必须能够对新的拥有角色执行\u003ccode class=\"literal\"\u003eSET ROLE\u003c/code\u003e，并且该角色必须在过程所在模式上具有\u003ccode class=\"literal\"\u003eCREATE\u003c/code\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\u003eargmode\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e参数的模式：\u003ccode class=\"literal\"\u003eIN\u003c/code\u003e、\u003ccode class=\"literal\"\u003eOUT\u003c/code\u003e、\u003ccode class=\"literal\"\u003eINOUT\u003c/code\u003e或\u003ccode class=\"literal\"\u003eVARIADIC\u003c/code\u003e。如果省略，默认为\u003ccode class=\"literal\"\u003eIN\u003c/code\u003e。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e参数名称。注意，\u003ccode class=\"command\"\u003eALTER PROCEDURE\u003c/code\u003e实际上并不关心参数名，因为确定过程标识时只使用参数数据类型。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e过程参数的数据类型（如果有，可带模式限定）。关于如何根据参数数据类型查找过程的详细信息，请参见\u003ca href=\"/docs/18/sql-dropprocedure.html\" title=\"DROP PROCEDURE\"\u003e\u003cspan class=\"refentrytitle\"\u003eDROP PROCEDURE\u003c/span\u003e\u003c/a\u003e。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_name\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\u003enew_owner\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该过程的新拥有者。注意，如果该过程被标记为\u003ccode class=\"literal\"\u003eSECURITY DEFINER\u003c/code\u003e，随后它将以新拥有者的身份执行。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_schema\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\u003eextension_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这种形式将过程标记为依赖于该扩展；如果指定了 \u003ccode class=\"literal\"\u003eNO\u003c/code\u003e，则表示不再依赖该扩展。被标记为依赖扩展的过程会在扩展被删除时一并删除，即使没有指定 \u003ccode class=\"literal\"\u003eCASCADE\u003c/code\u003e也是如此。一个过程可以依赖多个扩展，其中任意一个扩展被删除时，该过程都会被删除。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003e[ \u003cspan class=\"optional\"\u003eEXTERNAL\u003c/span\u003e ] SECURITY INVOKER\u003c/code\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003e[ \u003cspan class=\"optional\"\u003eEXTERNAL\u003c/span\u003e ] SECURITY DEFINER\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e更改该过程是否为安全性定义者。关键字\u003ccode class=\"literal\"\u003eEXTERNAL\u003c/code\u003e 为符合 SQL 标准而被忽略。关于这一能力的更多信息，参见\u003ca href=\"/docs/18/sql-createprocedure.html\" title=\"CREATE PROCEDURE\"\u003e\u003cspan class=\"refentrytitle\"\u003eCREATE PROCEDURE\u003c/span\u003e\u003c/a\u003e。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003econfiguration_parameter\u003c/code\u003e\u003c/em\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e添加或更改在调用该过程时要赋给某个配置参数的值。如果 \u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e为\u003ccode class=\"literal\"\u003eDEFAULT\u003c/code\u003e，或者等效地使用了\u003ccode class=\"literal\"\u003eRESET\u003c/code\u003e，则会移除过程局部设置，这样该过程就会使用其环境中的值执行。使用 \u003ccode class=\"literal\"\u003eRESET ALL\u003c/code\u003e可以清除所有过程局部设置。\u003ccode class=\"literal\"\u003eSET FROM CURRENT\u003c/code\u003e会将执行 \u003ccode class=\"command\"\u003eALTER PROCEDURE\u003c/code\u003e时该参数的当前值保存为进入该过程时要应用的值。\u003c/p\u003e\u003cp\u003e关于允许的参数名和值的更多信息，请参见\u003ca href=\"/docs/18/sql-set.html\" title=\"SET\"\u003e\u003cspan class=\"refentrytitle\"\u003eSET\u003c/span\u003e\u003c/a\u003e和\u003ca href=\"/docs/18/runtime-config.html\" title=\"第 19 章 服务器配置\"\u003e第 19 章\u003c/a\u003e。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eRESTRICT\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e为符合 SQL 标准而被忽略。\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e","key":"parameters","title":"参数"},{"html":"\u003cp\u003e要将具有两个\u003ccode class=\"type\"\u003einteger\u003c/code\u003e类型参数的过程 \u003ccode class=\"literal\"\u003einsert_data\u003c/code\u003e重命名为 \u003ccode class=\"literal\"\u003einsert_record\u003c/code\u003e：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER PROCEDURE insert_data(integer, integer) RENAME TO insert_record;\n\u003c/pre\u003e\u003cp\u003e要将具有两个\u003ccode class=\"type\"\u003einteger\u003c/code\u003e类型参数的过程 \u003ccode class=\"literal\"\u003einsert_data\u003c/code\u003e的拥有者改为 \u003ccode class=\"literal\"\u003ejoe\u003c/code\u003e：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER PROCEDURE insert_data(integer, integer) OWNER TO joe;\n\u003c/pre\u003e\u003cp\u003e要将具有两个\u003ccode class=\"type\"\u003einteger\u003c/code\u003e类型参数的过程 \u003ccode class=\"literal\"\u003einsert_data\u003c/code\u003e的模式改为 \u003ccode class=\"literal\"\u003eaccounting\u003c/code\u003e：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER PROCEDURE insert_data(integer, integer) SET SCHEMA accounting;\n\u003c/pre\u003e\u003cp\u003e要将过程\u003ccode class=\"literal\"\u003einsert_data(integer, integer)\u003c/code\u003e标记为依赖于扩展\u003ccode class=\"literal\"\u003emyext\u003c/code\u003e：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER PROCEDURE insert_data(integer, integer) DEPENDS ON EXTENSION myext;\n\u003c/pre\u003e\u003cp\u003e要调整会为过程自动设置的搜索路径：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER PROCEDURE check_password(text) SET search_path = admin, pg_temp;\n\u003c/pre\u003e\u003cp\u003e要禁用过程的\u003ccode class=\"varname\"\u003esearch_path\u003c/code\u003e自动设置：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER PROCEDURE check_password(text) RESET search_path;\n\u003c/pre\u003e\u003cp\u003e现在该过程将使用其调用者所使用的任何搜索路径执行。\u003c/p\u003e","key":"examples","title":"示例"},{"html":"\u003cp\u003e该语句与 SQL 标准中的\u003ccode class=\"command\"\u003eALTER PROCEDURE\u003c/code\u003e语句部分兼容。标准允许修改过程的更多属性，但不提供重命名过程、将过程设为安全性定义者、为过程附加配置参数值，或者更改过程的拥有者或模式的能力。标准还要求使用\u003ccode class=\"literal\"\u003eRESTRICT\u003c/code\u003e关键字，而它在\u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e中是可选的。\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, \u003ca href=\"/wiki/sql/drop-procedure/?v=18\" title=\"DROP PROCEDURE\"\u003e\u003cspan class=\"refentrytitle\"\u003eDROP PROCEDURE\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/alter-function/?v=18\" title=\"ALTER FUNCTION\"\u003e\u003cspan class=\"refentrytitle\"\u003eALTER FUNCTION\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/alter-routine/?v=18\" title=\"ALTER ROUTINE\"\u003e\u003cspan class=\"refentrytitle\"\u003eALTER ROUTINE\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e","key":"see_also","title":"另见"}],"sections_same_as":"","synopsis_html":"ALTER PROCEDURE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e [ ( [ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [, ...] ] ) ]\n    \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaction\u003c/code\u003e\u003c/em\u003e [ ... ] [ RESTRICT ]\nALTER PROCEDURE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e [ ( [ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [, ...] ] ) ]\n    RENAME TO \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_name\u003c/code\u003e\u003c/em\u003e\nALTER PROCEDURE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e [ ( [ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [, ...] ] ) ]\n    OWNER TO { \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_owner\u003c/code\u003e\u003c/em\u003e | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\nALTER PROCEDURE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e [ ( [ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [, ...] ] ) ]\n    SET SCHEMA \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_schema\u003c/code\u003e\u003c/em\u003e\nALTER PROCEDURE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e [ ( [ [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargmode\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargname\u003c/code\u003e\u003c/em\u003e ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eargtype\u003c/code\u003e\u003c/em\u003e [, ...] ] ) ]\n    [ NO ] DEPENDS ON EXTENSION \u003cem class=\"replaceable\"\u003e\u003ccode\u003eextension_name\u003c/code\u003e\u003c/em\u003e\n\n\u003cspan class=\"phrase\"\u003e其中 \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaction\u003c/code\u003e\u003c/em\u003e 是以下之一：\u003c/span\u003e\n\n    [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER\n    SET \u003cem class=\"replaceable\"\u003e\u003ccode\u003econfiguration_parameter\u003c/code\u003e\u003c/em\u003e { TO | = } { \u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e | DEFAULT }\n    SET \u003cem class=\"replaceable\"\u003e\u003ccode\u003econfiguration_parameter\u003c/code\u003e\u003c/em\u003e FROM CURRENT\n    RESET \u003cem class=\"replaceable\"\u003e\u003ccode\u003econfiguration_parameter\u003c/code\u003e\u003c/em\u003e\n    RESET ALL","synopsis_text":"ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\naction [ ... ] [ RESTRICT ]\nALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\nRENAME TO new_name\nALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\nOWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\nALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\nSET SCHEMA new_schema\nALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]\n[ NO ] DEPENDS ON EXTENSION extension_name\n其中 action 是以下之一：\n\n[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER\nSET configuration_parameter { TO | = } { value | DEFAULT }\nSET configuration_parameter FROM CURRENT\nRESET configuration_parameter\nRESET ALL"}},"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}
