Mandatos CREATE [OR REPLACE] PROCEDURE
Utilizar el mandato CREATE PROCEDURE para crear un procedimiento almacenado. Utilice CREATE OR REPLACE PROCEDURE para crear un procedimiento almacenado o para actualizar un procedimiento existente con un nuevo tipo de retorno, permisos de ejecución o cuerpo de procedimiento.
Sinopsis
CREATE [OR REPLACE] PROCEDURE <name> (<arguments>)
RETURNS <type> [ [ EXECUTE AS OWNER | EXECUTE AS CALLER ] ] LANGUAGE
NZPLSQL AS <procedure_body>;
Entradas
| Entrada | Descripción |
|---|---|
| nombre | Nombre del procedimiento almacenado que desea crear o sustituir. Este nombre es el identificador SQL que se utiliza para iniciar el procedimiento
en una expresión SQL. Si el procedimiento almacenado existe, no puede cambiar el nombre con el mandato CREATE OR REPLACE. Para sistemas que soportan varios esquemas, puede especificar un nombre en el formato esquema.procedimiento para crear un procedimiento en un esquema diferente de la base de datos actual. No puede crear un procedimiento en una base de datos diferente. |
| argumentos | Especifica una lista de tipos de datos de argumentos totalmente especificados. También
puede especificar el valor VARARGS para crear un procedimiento de argumento variable
donde los usuarios pueden entrar un máximo de 64 valores de cualquier tipo de datos soportado. VARARGS es un valor mutuamente excluyente; no puede especificar ningún otro
argumento en la lista. Si el procedimiento almacenado existe, no puede cambiar la lista de tipos de argumentos con el mandato CREATE OR REPLACE. Puede cambiar algunos aspectos de los tipos de argumento; por ejemplo, puede cambiar el tamaño de una serie o la precisión y escala de un valor numérico. También puede eliminar VARARGS de la lista de argumentos o añadirlo a una lista de argumentos vacía diferente. |
| RETURNS <tipo> | Especifica el tipo de datos devueltos por el procedimiento. El valor <type>puede ser un tipo de datos Netezza Performance Server o el valor REFTABLE (<nombre-tabla>) para indicar que devuelve un conjunto de resultados parecido a la tabla especificada. La tabla debe existir, aunque puede estar vacía, y continúa existiendo después del procedimiento. |
| EXECUTE AS OWNER | Si se especifica, el procedimiento almacenado se ejecuta utilizando el ID de propietario de procedimiento para todas las comprobaciones de permisos y control de accesos. Este es el valor predeterminado. |
| EXECUTE AS CALLER | Si se especifica, el procedimiento almacenado se ejecuta utilizando el ID del usuario que ha llamado al procedimiento para todas las comprobaciones de permisos y control de accesos. |
| IDIOMA | Especifica el lenguaje de programación utilizado para el procedimiento. El valor predeterminado y el único valor soportado es NZPLSQL. |
| cuerpo_procedimiento | Especifica el texto del procedimiento y debe escribirse entre
comillas simples o un par BEGIN_PROC/END_PROC. Puede ofuscar el cuerpo para enmascarar el contenido de los usuarios que tienen permiso para mostrar el procedimiento. |
Resultados
| Resultado | Descripción |
|---|---|
| CREATE PROCEDURE | Mensaje que el sistema devuelve si el mandato se ejecuta correctamente. |
| ERROR: creando procedimiento: permiso denegado. | El mensaje indica que el usuario no tiene permiso para crear procedimiento. |
| ERROR: No se permite al usuario 'nombre_usuario' crear/descartar procedimientos. | El sistema devuelve este mensaje si la cuenta de usuario no tiene permiso para crear un procedimiento almacenado. |
| ERROR: El sinónimo 'nombre' ya existe | El sistema devuelve este mensaje si existe un sinónimo con el nombre que ha especificado para el procedimiento almacenado. |
| ERROR: ProcedureCreate: el procedimiento NOMBRE ya existe con la misma firma | Este error se devuelve cuando se emite un mandato CREATE PROCEDURE y un procedimiento almacenado con el mismo nombre y existe una lista de tipos de argumento en la base de datos. En su lugar, utilice CREATE OR REPLACE PROCEDURE. |
| AVISO: FunctionCreate: UDX existente NOMBRE(ARGS) difiere de tamaño de argumentos de serie/numéricos | Este mensaje indica que existe un procedimiento almacenado con el nombre pero que tiene especificados tamaños diferentes para los argumentos de serie o numéricos. Si no tenía la intención de cambiar la firma de procedimiento almacenado, compruebe la firma y asegúrese de que es correcta. |
| ERROR: No se pueden especificar argumentos en un procedimiento varargs | No puede especificar el valor VARARGS ni ninguno otro valor de argumento en la lista de argumentos. El valor VARARGS es mutuamente excluyente. |
Descripción
Al crear un procedimiento almacenado, la firma del procedimiento almacenado (es decir, el nombre y la lista de tipos de argumentos) debe ser exclusiva en la base de datos. Ningún otro procedimiento almacenado puede tener el mismo nombre y lista de tipos de argumentos en la misma base de datos.
No puede cambiar el nombre de procedimiento almacenado o la lista de tipos de argumentos con el mandato CREATE OR REPLACE. Puede cambiar algunos aspectos de los tipos de argumento; por ejemplo, puede cambiar el tamaño de una serie o la precisión y escala de un valor numérico y puede añadir o eliminar el valor VARARGS en una lista de argumentos vacía diferente. Para cambiar el nombre o la lista de tipos de argumentos de un procedimiento almacenado, debe descartar el procedimiento almacenado y, a continuación, crear un procedimiento almacenado con el nuevo nombre o lista de tipos de argumento.
No puede sustituir un procedimiento almacenado que se esté utilizando actualmente en una consulta activa. Una vez finalizada la transacción para una consulta activa, el sistema Netezza Performance Server procesa el comando CREAR O SUSTITUIR PROCEDIMIENTO.
- Privilegios necesarios
- Debe tener permiso para crear procedimiento para utilizar el mandato CREATE PROCEDURE. Además, si utiliza CREATE OR REPLACE PROCEDURE para cambiar un procedimiento almacenado, debe tener permiso para crear procedimiento o modificar para cambiarlo.
- Tareas comunes
- Utilice el mandato CREATE PROCEDURE para crear un procedimiento almacenado nuevo y convertirse en el propietario. Puede utilizar el mandato ALTER PROCEDURE para cambiar el propietario de un propietario.
Uso
customername: MYDB.SCHEMA(USER)=> CREATE OR REPLACE PROCEDURE customer() RETURNS INT8
LANGUAGE NZPLSQL AS BEGIN_PROC BEGIN RAISE NOTICE 'The customer
name is alpha'; END; END_PROC;Para crear
un procedimiento nuevo denominado customername en un esquema diferente
de la misma base de datos:
MYDB.SCHEMA(USER)=> CREATE OR REPLACE PROCEDURE sch_two.customer()
RETURNS INT8 LANGUAGE NZPLSQL AS BEGIN_PROC BEGIN RAISE NOTICE 'The
customer name is alpha'; END; END_PROC;