sql >> Base de Datos >  >> RDS >> Oracle

Cómo usar la ejecución inmediata con la cláusula INTO en la base de datos Oracle

Ejecutar inmediatamente con cláusula INTO

SQL dinámico nativo o NDS está ayudando a los desarrolladores al proporcionar flexibilidad, mejorar el rendimiento y simplificar las sintaxis de programación. Hoy, en este tutorial, vamos a aprender cómo escribir una consulta de SQL dinámico en la base de datos de Oracle utilizando Ejecutar instrucción inmediata.

Entonces, ¿qué es una declaración de ejecución inmediata en la base de datos de Oracle?

Usando Execute Immediate podemos analizar y ejecutar cualquier instrucción SQL o un bloque PL/SQL dinámicamente en Oracle Database. Y por dinámicamente quiero decir en tiempo de ejecución.

Ejecutar inmediatamente toma solo un argumento. Puede ser una instrucción SQL o un bloque PL/SQL. El compilador trata los argumentos de la instrucción Execute Immediate como la cadena de tipos de datos VARCHAR2. Por lo tanto, asegúrese de encerrar su consulta SQL o bloque PL/SQL en el par de comillas simples (' ').

¿Podemos usar cualquier instrucción SQL con Ejecución inmediata?

Cualquier instrucción SQL o bloque PL/SQL que devuelva una sola fila de resultados se puede utilizar con Ejecutar inmediatamente. Además, si su declaración devuelve más de una fila de resultados, entonces hay otras formas. Además, estos los discutiremos en futuros tutoriales.

¿Cuál es la sintaxis de Ejecutar instrucción inmediata?

La sintaxis de la instrucción Execute Immediate es bastante simple. Echémosle un vistazo.

EXECUTE IMMEDIATE dynamic_query
[INTO user_defined_variable-1, user_defined_variable-2…]
[USING bind_argument-1, bind_argument-2…]
[RETURNING|RETURN-INTO clause];  

donde:

Ejecutar inmediatamente :Ejecutar inmediatamente es una frase reservada.

Consulta_dinámica :Seguido de la frase reservada tenemos que escribir nuestra consulta dinámica. Esta consulta podría ser una declaración SQL o un bloque PL/SQL. Además, el compilador trata la consulta dinámica como una cadena de tipo de datos VARCHAR2. Por lo tanto, debe asegurarse de incluir su consulta entre comillas simples.

cláusula INTO :Usando la cláusula INTO especificamos la lista de variables definidas por el usuario. Además, estos contendrán los valores devueltos por la instrucción SELECT dinámica. Es muy similar a la instrucción SELECT-INTO. También es una cláusula opcional, por lo que si no la necesita, puede omitirla.

cláusula USING :En caso de que haya utilizado una variable de vinculación en su consulta dinámica, esta cláusula le permitirá especificar los valores para esa variable de vinculación. Estos, a su vez, se sustituirán en consecuencia durante el tiempo de ejecución. Nuevamente, es una cláusula opcional.

REGRESO o REGRESAR A Cláusula:la cláusula Return into es opuesta a la cláusula USING. Mientras que en la cláusula using proporcionamos los valores a la consulta dinámica, aquí en la cláusula RETURNING INTO obtenemos los valores devueltos por la consulta dinámica. Y guárdelos en la lista especificada de argumentos de enlace. Nuevamente es una Cláusula Opcional.

También puede ver la explicación detallada de la sintaxis anterior en el video correspondiente aquí.

Ejemplo de instrucción Ejecutar inmediatamente.

Hacer una demostración de ejecución inmediata utilizando todas las cláusulas mencionadas anteriormente aumentará la complejidad y hará que el ejemplo sea difícil de entender. Que es exactamente lo contrario de lo que queremos.

Por lo tanto, para mantener el concepto simple y fácil de aprender, haremos el ejemplo de Ejecutar inmediatamente usando la primera cláusula que es INTO.

Ejecución inmediata con cláusula INTO.

SET SERVEROUTPUT ON;
DECLARE
    sql_qry     VARCHAR2 (150);
    emp_tot     NUMBER(3);
BEGIN
    
    sql_qry:= ‘SELECT count (*) FROM employees';
    EXECUTE IMMEDIATE sql_qry INTO emp_tot;
    DBMS_OUTPUT.PUT_LINE ('Total employees are: '||emp_tot);

END;
/

Aquí hay un ejemplo muy simple que demuestra cómo usar la ejecución inmediata con INTO cláusula en Oracle Database. Veamos qué hicimos aquí.

Sección de declaración

En la sección de declaración hemos declarado dos variables. La primera variable es sql_qry de tipo VARCHAR 2. Usaremos esta variable para almacenar la sentencia SELECT que queremos ejecutar con nuestra sentencia EXECUTE IMMEDIATE. Como esta variable va a contener una declaración DML, debemos asegurarnos de que tenga suficiente ancho de datos.

La segunda es la variable definida por el usuario emp_tot. Usaremos esta variable con la cláusula INTO para contener los datos devueltos por nuestra instrucción SELECT.

Sección de Ejecución

En esta sección solo tenemos tres declaraciones. Estos son:

Declaración 1 :

En la primera declaración estamos asignando una consulta SQL válida a la variable sql_qry.

Declaración 2

La segunda instrucción es la instrucción EXECUTE IMMEDIATE – INTO. En esta declaración justo después de escribir la frase reservada ejecutar inmediatamente escribimos el nombre de la variable sql_qry. La misma variable en la que almacenamos la sentencia SELECT.

En la ejecución, el motor de tiempo de ejecución reemplazará esta variable con el contenido que tiene, que en nuestro caso es una instrucción SELECT. Si no hay ningún error, el motor de tiempo de ejecución ejecutará la instrucción SELECT subyacente. A partir de entonces, devuelva su resultado, si lo hay.

Mientras tanto, nuestra declaración SELECT devolverá un valor que es el número total de filas de la tabla de empleados. Usando la cláusula INTO de la instrucción EXECUTE IMMEDIATE, almacenaremos ese valor devuelto en la variable emp_tot.

Declaración 3 :

La tercera declaración es una declaración de salida mediante la cual mostramos el valor de la variable emp_tot al usuario.

Información:
En el caso de una transacción DML, se requiere una confirmación explícita, ya que Ejecutar inmediatamente no confirmará automáticamente una transacción DML.

Una forma alternativa de escribir esta sección de ejecución es:

BEGIN
    EXECUTE IMMEDIATE 'SELECT count (*) FROM employees' INTO emp_tot;
    DBMS_OUTPUT.PUT_LINE ('Total employees are: '||emp_tot); 
END;
/

Si lo desea, puede omitir la primera declaración por completo. Simplemente escriba la consulta SQL directamente después de la frase reservada EJECUTAR INMEDIATO.

Mire el video en mi canal de YouTube para saber cuál es la forma correcta de escribir la consulta para Ejecutar inmediatamente.

¿Qué piensan ustedes?

Personalmente, me gusta la forma anterior en la que usamos la variable para almacenar la consulta. Y luego usé esa variable con Execute Immediate. Porque eso hace que nuestro código se vea ordenado y limpio. Además, nos ayuda a realizar un seguimiento de nuestra consulta por si alguna vez queremos cambiarla o modificarla.

¿Qué piensan ustedes? ¿Qué forma de escribir Ejecutar inmediatamente te gusta más? El primero o el segundo. Cuéntenme sus opiniones en mi página de Facebook o en mi Twitter.

Si encuentra que aprender a través de videos es muy conveniente, puede ver el video en mi canal de YouTube. Y obtenga información sobre Ejecutar inmediatamente con la cláusula INTO.

Hasta ahora, en este tutorial, aprendimos qué es Ejecutar declaración inmediata y cómo usarla para ejecutar una consulta SQL dinámicamente usando la cláusula INTO en la base de datos Oracle. Creo que es suficiente para este tutorial. Mantengámoslo simple al no extenderlo más.

Asegúrate de suscribirte a mi canal de YouTube para ver más tutoriales interesantes.

¡Gracias y que tengas un gran día!