Sentencia EXECUTE IMMEDIATE (PL/SQL)

La sentencia EXECUTE IMMEDIATE prepara una forma ejecutable de una sentencia SQL a partir de una forma de serie de caracteres de la sentencia y, a continuación, ejecuta la sentencia SQL. EXECUTE IMMEDIATE combina las funciones básicas de las sentencias PREPARE y EXECUTE.

Invocación

Esta sentencia sólo se puede especificar en un contexto PL/SQL.

Autorización

Las normas de autorización son las que se han definido para la sentencia de SQL especificada.

El ID de autorización de la sentencia podría verse afectado por la opción de enlace DYNAMICRULES.

Sintaxis

Leer diagrama de sintaxisOmitir diagrama de sintaxis visualEXECUTE IMMEDIATEexpresión-sql INTO,variableBULK COLLECT INTO,variable-matrizUSING,INregularIN OUTvariableOUTvariable

Descripción

expresión-sql
Expresión que devuelve la serie de sentencia que se va a ejecutar. La expresión debe devolver un tipo de serie de caracteres que sea inferior al tamaño de sentencia máximo de 2 097 152 bytes. Tenga en cuenta que un CLOB(2097152) puede contener una sentencia de tamaño máximo, pero un VARCHAR no puede.
La serie de caracteres de la sentencia debe ser una de las sentencias de SQL siguientes:
  • ALTER
  • CALL
  • Comentario
  • COMMIT
  • SQL compuesto (compilado)
  • SQL compuesto (en línea)
  • CREAR
  • DECLARE GLOBAL TEMPORARY TABLE
  • Suprimir
  • DROP
  • EXPLAIN
  • FLUSH EVENT MONITOR
  • FLUSH PACKAGE CACHE
  • OTORGAR
  • INSERT
  • LOCK TABLE
  • MERGE
  • REFRESH TABLE
  • RELEASE SAVEPOINT
  • RENAME
  • REVOCAR
  • ROLLBACK
  • SAVEPOINT
  • SELECT (sólo cuando la sentencia EXECUTE IMMEDIATE también especifica la cláusula BULK COLLECT INTO)
  • SET COMPILATION ENVIRONMENT
  • SET CURRENT DECFLOAT ROUNDING MODE
  • SET CURRENT DEFAULT TRANSFORM GROUP
  • SET CURRENT DEGREE
  • SET CURRENT FEDERATED ASYNCHRONY
  • SET CURRENT EXPLAIN MODE
  • SET CURRENT EXPLAIN SNAPSHOT
  • SET CURRENT IMPLICIT XMLPARSE OPTION
  • SET CURRENT ISOLATION
  • SET CURRENT LOCALE LC_TIME
  • SET CURRENT LOCK TIMEOUT
  • SET CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION
  • SET CURRENT MDC ROLLOUT MODE
  • SET CURRENT OPTIMIZATION PROFILE
  • SET CURRENT QUERY OPTIMIZATION
  • SET CURRENT REFRESH AGE
  • SET CURRENT SQL_CCFLAGS
  • SET ROLE (solamente si el comportamiento de ejecución de DYNAMICRULES está en vigor para el paquete)
  • SET ENCRYPTION PASSWORD
  • SET EVENT MONITOR STATE (sólo si el comportamiento de ejecución de DYNAMICRULES está en vigor para el paquete)
  • SET INTEGRITY
  • SET PASSTHRU
  • SET PATH
  • SET SCHEMA
  • SET SERVER OPTION
  • SET SESSION AUTHORIZATION
  • SET variable
  • TRANSFER OWNERSHIP (solamente si el comportamiento de ejecución de DYNAMICRULES está en vigor para el paquete)
  • TRUNCATE (solamente si el comportamiento de ejecución de DYNAMICRULES está en vigor para el paquete)
  • UPDATE

La serie de sentencia no debe contener un terminador de sentencia, con la excepción de las sentencias de SQL compuesto que pueden contener signos de punto y coma (;) para separar las sentencias dentro del bloque compuesto. Se utiliza una sentencia de SQL compuesto dentro de algunas sentencias CREATE y ALTER que, por lo tanto, también pueden contener signos de punto y coma.

Cuando se ejecuta una sentencia EXECUTE IMMEDIATE, la serie de sentencia se analiza y se comprueba si hay errores. Si la sentencia SQL no es válida, no se ejecuta y se emite una excepción.

INTO variable
Especifica el nombre de una variable que va a recibir un valor de salida del marcador de parámetro correspondiente.
BULK COLLECT INTO variable-matriz
Identifica una o más variables con un tipo de datos de matriz. Cada fila de la consulta se asigna a un elemento de cada matriz en el orden del conjunto de resultados, con el índice de matriz asignado en secuencia.
  • Si se especifica exactamente una variable-matriz :
    • Si el tipo de datos del elemento variable-matriz no es un tipo de registro, la lista SELECT debe tener exactamente una columna y el tipo de datos de columna debe ser asignable al tipo de datos de elemento de matriz.
    • Si el tipo de datos del elemento variable-matriz es un tipo de registro, la lista SELECT debe ser asignable al tipo de registro.
  • Si se especifican varias variables de matriz:
    • El tipo de datos del elemento variable-matriz no debe ser un tipo de registro.
    • Debe haber una variable-matriz para cada columna de la lista SELECT.
    • El tipo de datos de cada columna de la lista SELECT debe poder asignarse al tipo de datos de elemento de matriz de la variable-matrizcorrespondiente.
Si el tipo de datos de variable-matriz es una matriz ordinaria, la cardinalidad máxima debe ser mayor o igual que el número de filas que devuelve la consulta.

Esta cláusula sólo se puede utilizar si la sql-expression es una sentencia SELECT.

USING
IN expresión
Especifica un valor que se pasa a un marcador de parámetro de entrada. IN es el valor predeterminado.
IN OUT variable
Especifica el nombre de una variable que proporciona un valor de entrada a, o recibe un valor de salida del marcador de parámetro correspondiente. Esta opción no está soportada cuando se utiliza la cláusula INTO o BULK COLLECT INTO .
OUT variable
Especifica el nombre de una variable que recibe un valor de salida del marcador de parámetro correspondiente. Esta opción no está soportada cuando se utiliza la cláusula INTO o BULK COLLECT INTO .
El número y el orden de las expresiones o variables evaluadas deben coincidir con el número y el orden de-y ser compatibles con-los marcadores de parámetro en sql-expression.

Notas

  • El almacenamiento de sentencias en memoria caché afecta al funcionamiento de la sentencia EXECUTE IMMEDIATE.

Ejemplo

CREATE OR REPLACE PROCEDURE proc1( p1 IN NUMBER, p2 IN OUT NUMBER, p3 OUT NUMBER )
IS
BEGIN
  p3 := p1 + 1;
  p2 := p2 + 1;
END;
/

EXECUTE IMMEDIATE 'BEGIN proc1( :1, :2, :3 ); END' USING IN p1 + 10, IN OUT p3,
  OUT p2;

EXECUTE IMMEDIATE 'BEGIN proc1( :1, :2, :3 ); END' INTO p3, p2 USING p1 + 10, p3;