CREAR PROCEDIMIENTO: definir un nuevo procedimiento

Sinopsis

CREATE[ORREPLACE]PROCEDURE
    name ([[ argmode ][ argname ] argtype [  DEFAULT default_expr ][,...]])
  [ EXTERNAL ] SECURITY INVOKER ...

Descripción

CREATE PROCEDURE define un nuevo procedimiento. CREATE OR REPLACE PROCEDURE creará un nuevo procedimiento o reemplazará una definición existente. Para poder definir un procedimiento, el usuario debe tener la USAGE privilegio sobre el idioma.

Si se incluye un nombre de esquema, el procedimiento se crea en el esquema especificado. De lo contrario, se crea en el esquema actual. El nombre del nuevo procedimiento no debe coincidir con ningún procedimiento o función existente con los mismos tipos de argumentos de entrada en el mismo esquema. Sin embargo, los procedimientos y funciones de diferentes tipos de argumentos pueden compartir un nombre (esto se llama sobrecarga).

Para reemplazar la definición actual de un procedimiento existente, use CREATE OR REPLACE PROCEDURE. No es posible cambiar el nombre o los tipos de argumentos de un procedimiento de esta manera (si lo intentara, en realidad estaría creando un procedimiento nuevo y distinto).

Cuando CREATE OR REPLACE PROCEDURE se utiliza para reemplazar un procedimiento existente, la propiedad y los permisos del procedimiento no cambian. A todas las demás propiedades del procedimiento se les asignan los valores especificados o implícitos en el comando. Debe ser propietario del procedimiento para reemplazarlo (esto incluye ser miembro de la función de propietario).

El usuario que crea el procedimiento se convierte en el propietario del procedimiento.

Para poder crear un procedimiento, debe tener USAGE privilegio sobre los tipos de argumentos.

Parámetros

name

El nombre (opcionalmente calificado por esquema) del procedimiento que se va a crear.

argmode

El modo de un argumento: IN, INOUT, o VARIADIC. Si se omite, el valor predeterminado es IN. (OUT Los argumentos actualmente no son compatibles con los procedimientos. Usar INOUT en lugar de.)

argname

El nombre de un argumento.

argtype

Los tipos de datos de los argumentos del procedimiento (opcionalmente calificados por esquema), si los hay. Los tipos de argumentos pueden ser tipos base, compuestos o de dominio, o pueden hacer referencia al tipo de columna de una tabla.

Dependiendo del idioma de implementación, también se puede permitir especificar pseudo-tipos tal como cstring. Los pseudo-tipos indican que el tipo de argumento real está especificado de forma incompleta o fuera del conjunto de tipos de datos SQL ordinarios.

Se hace referencia al tipo de columna escribiendo table_name.column_name%TYPE. El uso de esta función a veces puede ayudar a que un procedimiento sea independiente de los cambios en la definición de una tabla.

default_expr

Una expresión que se utilizará como valor predeterminado si no se especifica el parámetro. La expresión debe ser coercible al tipo de argumento del parámetro. Todos los parámetros de entrada que siguen a un parámetro con un valor predeterminado también deben tener valores predeterminados.

lang_name

El nombre del idioma en el que se implementa el procedimiento. Puede ser sql, c, internal, o el nombre de un lenguaje de procedimiento definido por el usuario, por ejemplo, plpgsql. Incluir el nombre entre comillas simples está obsoleto y requiere que coincidan las mayúsculas y las minúsculas.

TRANSFORM FOR TYPE type_name [, ... ] }

Deben aplicarse las listas que transforman una llamada al procedimiento. Las transformaciones convierten entre tipos de SQL y tipos de datos específicos del idioma; ver CREAR TRANSFORMAR. Las implementaciones de lenguaje de procedimientos generalmente tienen un conocimiento codificado de los tipos integrados, por lo que no es necesario enumerarlos aquí. Si una implementación de lenguaje de procedimiento no sabe cómo manejar un tipo y no se proporciona ninguna transformación, recurrirá a un comportamiento predeterminado para convertir tipos de datos, pero esto depende de la implementación.

[EXTERNAL] SECURITY INVOKER[EXTERNAL] SECURITY DEFINER

SECURITY INVOKER indica que el procedimiento debe ejecutarse con los privilegios del usuario que lo llama. Ese es el valor predeterminado. SECURITY DEFINER especifica que el procedimiento debe ejecutarse con los privilegios del usuario que lo posee.

los key palabra EXTERNAL está permitido para la conformidad con SQL, pero es opcional ya que, a diferencia de SQL, esta característica se aplica a todos los procedimientos, no solo a los externos.

A SECURITY DEFINER El procedimiento no puede ejecutar declaraciones de control de transacciones (por ejemplo, COMMIT y ROLLBACK, dependiendo del idioma).

configuration_parametervalue

los SET La cláusula hace que el parámetro de configuración especificado se establezca en el valor especificado cuando se ingresa al procedimiento, y luego se restaura a su valor anterior cuando el procedimiento sale. SET FROM CURRENT guarda el valor del parámetro que es actual cuando CREATE PROCEDURE se ejecuta como el valor que se aplicará cuando se ingrese el procedimiento.

Si un SET cláusula se adjunta a un procedimiento, entonces los efectos de un SET LOCAL El comando ejecutado dentro del procedimiento para la misma variable está restringido al procedimiento: el valor anterior del parámetro de configuración aún se restaura al salir del procedimiento. Sin embargo, un ordinario SET comando (sin LOCAL) anula el SET cláusula, al igual que lo haría para una cláusula anterior SET LOCAL comando: los efectos de dicho comando persistirán después de la salida del procedimiento, a menos que se revierta la transacción actual.

Si un SET se adjunta una cláusula a un procedimiento, entonces ese procedimiento no puede ejecutar declaraciones de control de transacciones (por ejemplo, COMMIT y ROLLBACK, dependiendo del idioma).

Ver SET y Capítulo 19 para obtener más información sobre los nombres y valores de los parámetros permitidos.

definition

A string constante definiendo el procedimiento; el significado depende del idioma. Puede ser un nombre de procedimiento interno, la ruta a un archivo de objeto, un comando SQL o texto en un lenguaje de procedimiento.

A menudo es útil utilizar cotizaciones en dólares (consulte la Sección 4.1.2.4) para escribir la definición del procedimiento. string, en lugar de la sintaxis normal de comillas simples. Sin las cotizaciones en dólares, las comillas simples o las barras invertidas en la definición del procedimiento deben eliminarse duplicándolas.

obj_file, link_symbol

Esta forma de AS La cláusula se utiliza para procedimientos en lenguaje C cargables dinámicamente cuando el nombre del procedimiento en el código fuente del lenguaje C no es el mismo que el nombre del procedimiento SQL. los string obj_file es el nombre del archivo de biblioteca compartida que contiene el procedimiento C compilado y se interpreta como el comando LOAD. los string link_symbol es el símbolo de enlace del procedimiento, es decir, el nombre del procedimiento en el código fuente del lenguaje C. Si se omite el símbolo de enlace, se supone que es el mismo que el nombre del procedimiento SQL que se está definiendo.

Cuando se repite CREATE PROCEDURE las llamadas se refieren al mismo archivo de objeto, el archivo solo se carga una vez por sesión. Para descargar y volver a cargar el archivo (quizás durante el desarrollo), inicie una nueva sesión.

Notas

Consulte CREAR FUNCIÓN para obtener más detalles sobre la creación de funciones que también se aplican a los procedimientos.

Utilice CALL para ejecutar un procedimiento.

Ejemplos de

CREATEPROCEDURE insert_data(a integer, b integer)LANGUAGESQLAS $$
INSERTINTO tbl VALUES(a);INSERTINTO tbl VALUES(b);
$$;CALL insert_data(1,2);

Compatibilidad

A CREATE PROCEDURE El comando está definido en el estándar SQL. La versión de PostgreSQL es similar pero no totalmente compatible. Para obtener más información, consulte también CREAR FUNCIÓN.

Ver también

MODIFICAR PROCEDIMIENTO, SOLTAR PROCEDIMIENTO, LLAMAR, CREAR FUNCIÓN

Anterior Hasta próximo
CREAR POLÍTICA Hogar CREAR PUBLICACIÓN