=============
ALTER ROUTINE
=============


.. container:: refentry
   :name: SQL-ALTERROUTINE

   .. container:: titlepage

   .. container:: refnamediv

      .. rubric:: ALTER ROUTINE
         :name: alter-routine

      ALTER ROUTINE — 更改一个例程的定义

   .. container:: refsynopsisdiv

      .. rubric:: 大纲
         :name: 大纲

      .. code:: synopsis

         ALTER ROUTINE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
             action [ ... ] [ RESTRICT ]
         ALTER ROUTINE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
             RENAME TO new_name
         ALTER ROUTINE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
             OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
         ALTER ROUTINE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
             SET SCHEMA new_schema
         ALTER ROUTINE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
             DEPENDS ON EXTENSION extension_name

         其中action是下列之一:

             IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
             [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
             PARALLEL { UNSAFE | RESTRICTED | SAFE }
             COST execution_cost
             ROWS result_rows
             SET configuration_parameter { TO | = } { value | DEFAULT }
             SET configuration_parameter FROM CURRENT
             RESET configuration_parameter
             RESET ALL

   .. container:: refsect1
      :name: id-1.9.3.27.5

      .. rubric:: 描述
         :name: 描述

      ``ALTER ROUTINE``\ 更改一个例程的定义,它可以是聚集函数、普通函数或者过程。参数的描述、更多的例子以及进一步的细节请参考\ `ALTER
      AGGREGATE <sql-alteraggregate.html>`__\ 、\ `ALTER
      FUNCTION <sql-alterfunction.html>`__\ 以及\ `ALTER
      PROCEDURE <sql-alterprocedure.html>`__\ 。

   .. container:: refsect1
      :name: id-1.9.3.27.6

      .. rubric:: 示例
         :name: 示例

      将类型\ ``integer``\ 的例程\ ``foo``\ 重命名为\ ``foobar``\ :

      .. code:: programlisting

         ALTER ROUTINE foo(integer) RENAME TO foobar;

      不管\ ``foo``\ 是聚集、函数还是过程,这个命令都能使用。

   .. container:: refsect1
      :name: id-1.9.3.27.7

      .. rubric:: 兼容性
         :name: 兼容性

      这个语句与SQL标准中的\ ``ALTER ROUTINE``\ 语句部分兼容。更多细节请参考\ `ALTER
      FUNCTION <sql-alterfunction.html>`__\ 和\ `ALTER
      PROCEDURE <sql-alterprocedure.html>`__\ 。允许例程名称引用聚集函数是一种PostgreSQL的扩展。

   .. container:: refsect1
      :name: id-1.9.3.27.8

      .. rubric:: 另见
         :name: 另见

      `ALTER AGGREGATE <sql-alteraggregate.html>`__, `ALTER
      FUNCTION <sql-alterfunction.html>`__, `ALTER
      PROCEDURE <sql-alterprocedure.html>`__, `DROP
      ROUTINE <sql-droproutine.html>`__
      注意没有\ ``CREATE ROUTINE``\ 命令。