Declaración de procedimiento SQL (SQL PL)

Una sentencia de control SQL puede permitir especificar varias sentencias SQL en la sentencia de control SQL. Estas sentencias se definen como sentencias de procedimiento de SQL.

Sintaxis

Leer diagrama de sintaxisOmitir el diagrama de sintaxis visualDeclaración de control SQLALLOCATE CURSOR, sentencia1ALTER DATABASE, sentencia12Declaración ALTER FUNCTION (escalar externo, tabla externa, fuente, escalar SQL o tabla SQL)34sentencia ALTER INDEX12sentencia ALTER MASK12sentencia ALTER PERMISSION12Declaración ALTER PROCEDURE (externa, SQL - externa o SQL - nativa)2ALTER SEQUENCE, sentencia12sentencia ALTER STOGROUP12Sentencia ALTER TABLE12Sentencia ALTER TABLESPACE12sentencia ALTER TRIGGER12ALTER TRUSTED CONTEXT, sentencia12ALTER VIEW, sentencia12ASSOCIATE LOCATORS, sentenciaSentencia CALLCLOSE, sentenciaCOMMENT, sentencia14Sentencia COMMIT5Sentencia CONNECT6CREATE ALIAS, sentencia12sentencia CREATE DATABASE12Instrucción CREATE FUNCTION (escalar externo, tabla externa o fuente)12sentencia CREATE GLOBAL TEMPORARY TABLE12Sentencia CREATE INDEX14Instrucción CREATE PROCEDURE (externa)12CREATE ROLE, sentencia12CREATE SEQUENCE, sentencia12Sentencia CREATE STOGROUP12Sentencia CREATE TABLE7sentencia CREATE TABLESPACE12CREATE TRUSTED CONTEXT, sentencia12Sentencia CREATE TYPE (matriz)12CREATE TYPE (diferenciado), sentencia12CREATE VARIABLE, sentencia12Sentencia CREATE VIEW14
Sintaxis (continuación)
Leer diagrama de sintaxisOmitir el diagrama de sintaxis visualDECLARE CURSOR, sentenciaDECLARE GLOBAL TEMPORARY TABLE, sentencia12sentencia DELETE4DROP, sentencia18Declaración de CAMBIO12EXECUTE, sentenciaEXECUTE IMMEDIATE, sentenciasentencia EXPLAIN1Sentencia FETCH3Sentencia GET DIAGNOSTICSSentencia GRANT12Sentencia INSERT4Declaración de la ETIQUETA14sentencia LOCK TABLE14Sentencia MERGE4OPEN, sentenciaSentencia PREPAREsentencia REFRESH TABLE4Declaración de EXENCIÓN DE RESPONSABILIDAD6RELEASE SAVEPOINT, sentenciaRENAME, sentenciaREVOKE, sentenciaDeclaración ROLLBACK (con cláusula TO SAVEPOINT)12Instrucción ROLLBACK (sin cláusula TO SAVEPOINT)5SAVEPOINT, sentencia14SELECT INTO, sentenciaSET asignación-declaración declaraciónSET CONNECTION, sentencia6ESTABLECER declaración de registro especial9Sentencia TRUNCATE4Sentencia UPDATE4VALUES INTO, sentencia
Notas:
  • 1 La sentencia no está permitida en un cuerpo de rutina SQL para una función SQL.
  • 2 La sentencia no está permitida en un SQL-trigger-body para ningún trigger, y un procedimiento que contenga la sentencia no debe ser invocado directa o indirectamente desde el cuerpo de un trigger BEFORE.
  • 3 Una sentencia FETCH no debe especificar una cláusula de orientación de búsqueda, una cláusula de búsqueda de varias filas, las cláusulas WITH CONTINUE o CURRENT CONTINUE.
  • 4 La sentencia no está permitida en un cuerpo de SQL-trigger para un trigger BEFORE, y un procedimiento que contenga la sentencia no debe ser invocado directa o indirectamente desde el cuerpo de un trigger BEFORE.
  • 5 Las sentencias COMMIT y ROLLBACK (sin la cláusula TO SAVEPOINT) sólo deben especificarse dentro del cuerpo de un procedimiento SQL.
  • 6 Las sentencias CONNECT, RELEASE connection y SET CONNECTION sólo deben especificarse dentro del cuerpo de un procedimiento SQL.
  • 7 Las sentencias CREATE TABLE no deben incluir columnas LOB o XML.
  • 8 Sólo se permiten las sentencias DROP TABLE, DROP VIEW y DROP INDEX.
  • 9 Las sentencias SET de registro especial están permitidas en un cuerpo SQL-trigger para un trigger, excepto para SET CURRENT PACKAGE PATH y SET CURRENT PACKAGESET.

La siguiente tabla resume qué instrucciones SQL se pueden utilizar en el cuerpo de un procedimiento SQL, en el cuerpo de una función SQL o en el cuerpo de un disparador SQL o en un procedimiento al que se hace referencia en un disparador BEFORE. Una marca de verificación indica que una sentencia es compatible con cada tipo de rutina.

Tabla 1. Donde cada SQL-statement puede ser emitido en rutinas SQL PL.
Sentencia ¿Cuerpo de procedimiento SQL? ¿Cuerpo de función SQL? ¿Cuerpo de activación SQL?
Declaración de control SQL
ALLOCATE CURSOR  
ALTER DATABASE    
ALTER FUNCTION (escalar externo, tabla externa, sourced, escalar SQL o tabla SQL) ✓4
ALTER MASK    
ALTER PERMISSION    
ALTER PROCEDURE (externo, SQL - externo o SQL - nativo)  
ALTER SEQUENCE    
ALTER STOGROUP    
ALTER TABLE    
ALTER TABLESPACE    
ALTER TRIGGER    
ALTER TRUSTED CONTEXT    
ALTER VIEW    
ASSOCIATE LOCATORS
CALL
CLOSE
COMENTAR   ✓4
COMMIT    
CONNECT  
CREATE ALIAS    
CREATE DATABASE    
CREATE FUNCTION    
CREATE GLOBAL TEMPORARY TABLE    
CREATE INDEX   ✓4
CREATE PROCEDURE (externo)    
CREATE ROLE    
CREATE SEQUENCE    
CREATE STOGROUP    
CREATE TABLE 7 7 7
CREATE TABLESPACE    
CREATE TRUSTED CONTEXT    
CREATE TYPE (matriz)    
CREATE TYPE (diferenciado)    
CREATE VARIABLE    
CREATE VIEW   4
DECLARE CURSOR
DELETE ✓4   ✓4
DROP ✓8   8
EXCHANGE    
EXECUTE
EXECUTE IMMEDIATE
EXPLAIN  
FETCH 3 3 3
GET DIAGNOSTICS
OTORGAR   4, 7
INSERT ✓4
ETIQUETA   4
LOCK TABLE   4
MERGE   4
OPEN
PREPARE
REFRESH TABLE 4
CONEXIÓN de la LIBERACIÓN    
RELEASE SAVEPOINT    
RENAME
REVOCAR
ROLLBACK (con cláusula TO SAVEPOINT)    
ROLLBACK (sin cláusula TO SAVEPOINT)  
SAVEPOINT   ✓4
SELECT INTO
SET asignación-declaración
SET CONNECTION    
SET registro especial 9
TRUNCATE 4
UPDATE ✓4
VALUES INTO
Notas:

Las notas siguientes se utilizan tanto en el diagrama sintáctico precedente como, a veces, en la tabla anterior.

  1. La sentencia no está permitida en un cuerpo de rutina SQL para una función SQL.
  2. La sentencia no está permitida en un SQL-trigger-body para ningún trigger, y un procedimiento que contenga la sentencia no debe ser invocado directa o indirectamente desde el cuerpo de un trigger BEFORE.
  3. Una sentencia FETCH no debe especificar una cláusula de orientación de búsqueda, una cláusula de búsqueda de varias filas, las cláusulas WITH CONTINUE o CURRENT CONTINUE.
  4. La sentencia no está permitida en un cuerpo de SQL-trigger para un trigger BEFORE, y un procedimiento que contenga la sentencia no debe ser invocado directa o indirectamente desde el cuerpo de un trigger BEFORE.
  5. Las sentencias COMMIT y ROLLBACK (sin la cláusula TO SAVEPOINT) sólo deben especificarse dentro del cuerpo de un procedimiento SQL.
  6. Las sentencias CONNECT, RELEASE connection y SET CONNECTION sólo deben especificarse dentro del cuerpo de un procedimiento SQL.
  7. Las sentencias CREATE TABLE no deben incluir columnas LOB o XML.
  8. Sólo se permiten las sentencias DROP TABLE, DROP VIEW y DROP INDEX.
  9. Las sentencias SET special-register están permitidas en un SQL-trigger-body para un trigger, excepto para SET CURRENT PACKAGE PATH y SET CURRENT PACKAGESET.

Descripción

Declaración de control SQL
Especifica una instrucción SQL que proporciona la capacidad de controlar el flujo lógico, declarar y establecer variables, y manejar advertencias y excepciones, tal como se define en esta sección. Las sentencias de control son compatibles con las rutinas SQL.
sentencia_sql
Especifica una sentencia de SQL. Estas sentencias se describen en Sentencias SQL en Db2 for z/OS.

Notas

Comentarios

Los comentarios pueden incluirse en el cuerpo de una rutina SQL. Además de la forma de comentarios con doble guión (--), un comentario puede comenzar con /* y terminar con */. Las siguientes reglas se aplican a esta forma de comentario:

  • Los caracteres iniciales /* deben estar adyacentes y en la misma línea.
  • Los caracteres finales */ deben estar adyacentes y en la misma línea.
  • Los comentarios pueden iniciarse dondequiera que haya un espacio válido.
  • Los comentarios pueden continuar en la siguiente línea.
Detección y procesamiento de condiciones de error y advertencia

A medida que se ejecuta una instrucción SQL, Db2 almacena información sobre el procesamiento de la instrucción en un área de diagnóstico (incluidos SQLSTATE y SQLCODE), a menos que se indique lo contrario en la descripción de la instrucción SQL. Una condición de finalización puede indicar que la instrucción SQL se completó correctamente, se completó con una condición de advertencia o se completó con una condición de no encontrado. Una condición de excepción indica que la instrucción SQL no se ha realizado correctamente.

Se puede definir un controlador de condiciones para que se ejecute cuando se produzca una condición de excepción, una condición de advertencia o una condición de no encontrado en una sentencia compuesta. La declaración de un controlador de condiciones incluye el código que se ejecuta cuando se activa el controlador de condiciones. Cuando se produce una condición distinta de la finalización con éxito en el procesamiento de la instrucción de procedimiento SQL y un controlador de condiciones que puede manejar la condición está dentro del alcance, se activará uno de esos controladores de condiciones para procesar la condición. Consulte la declaración compuesta para obtener información sobre la definición de gestores de condiciones. El código del controlador de condiciones puede comprobar si existe una condición de advertencia, una condición de no encontrado o una condición de excepción y puede tomar las medidas adecuadas. Utilice uno de los siguientes métodos al principio del cuerpo de un controlador de condición para comprobar la condición en el área de diagnóstico que provocó la activación del controlador.

  • Emitir una declaración GET DIAGNOSTICS para solicitar la información del área de diagnóstico. Véase la sentencia GET DIAGNOSTICS.
  • Prueba las variables SQL SQLSTATE y SQLCODE.

Si la condición es una advertencia y no existe un controlador para la condición, los dos métodos anteriores pueden utilizarse fuera del cuerpo de un controlador de condición, si se utilizan inmediatamente después de la declaración para la que se desea la condición. Si la condición es un error y no existe un controlador para la condición, la rutina termina con la condición de error.