¿Qué es SQL Dinámico?
Dynamic SQL es una metodología de programación para generar y ejecutar sentencias en tiempo de ejecución. Se utiliza principalmente para escribir programas flexibles y de propósito general donde se crearán y ejecutarán las sentencias SQL en tiempo de ejecución en función del requisito.,
en este tutorial, aprenderá-
- Formas de escribir SQL dinámico
- NDS (SQL dinámico nativo) – ejecutar inmediatamente
- DBMS_SQL para SQL dinámico
formas de escribir SQL dinámico
PL/SQL proporciona dos formas de escribir SQL dinámico
- NDS – SQL dinámico nativo
- dbms_sql
NDS (native dynamic SQL) – ejecutar inmediatamente
native dynamic SQL es la forma más fácil de escribir SQL dinámico. Utiliza el comando’ EXECUTE IMMEDIATE ‘ para crear y ejecutar el SQL en tiempo de ejecución., Pero para usar de esta manera, el tipo de datos y el número de variables que se utilizarán en un tiempo de ejecución deben conocerse antes. También ofrece un mejor rendimiento y menos complejidad en comparación con DBMS_SQL.
la Sintaxis
EXECUTE IMMEDIATE(<SQL>)
- La sintaxis anterior muestra la EJECUCIÓN INMEDIATA de comandos.
- La cláusula INTO es opcional y solo se usa si el SQL dinámico contiene una instrucción select que obtiene valores. El tipo de variable debe coincidir con el tipo de variable de la instrucción select., el uso de la cláusula
- Es opcional y solo se usa si el SQL dinámico contiene cualquier variable bind.
Ejemplo 1: en este ejemplo, vamos a obtener los datos de la tabla emp para emp_no ‘1001’ usando la instrucción NDS.
Salida
Employee Name : XXX Employee Number: 1001 Salary: 15000 Manager ED: 1000
Explicación del Código:
DBMS_SQL para SQL Dinámico
PL/SQL proporcionar el paquete DBMS_SQL que le permite trabajar con SQL dinámico. El proceso de creación y ejecución del SQL dinámico contiene el siguiente proceso.,
- abrir CURSOR: el SQL dinámico se ejecutará de la misma manera que un cursor. Así que para ejecutar la sentencia SQL, debemos abrir el cursor.
- Analizar SQL: el siguiente paso es analizar el SQL dinámico. Este proceso simplemente verificará la sintaxis y mantendrá la consulta lista para ejecutarse.
- Valores de variables de enlace: el siguiente paso es asignar los valores para las variables de enlace, si los hay.
- DEFINIR COLUMNA: El siguiente paso es definir la columna usando sus posiciones relativas en la instrucción select.
- EXECUTE: el siguiente paso es ejecutar la consulta analizada.,
- recuperar valores: el siguiente paso es recuperar los valores ejecutados.
- cerrar CURSOR: una vez que se obtienen los resultados, el cursor debe cerrarse.
Ejemplo 1: en este ejemplo, vamos a obtener los datos de la tabla emp para emp_no ‘1001’ usando la instrucción DBMS_SQL.
Salida
Employee Name:XXX Employee Number:1001 Salary:15000 Manager ID:1000
Explicación del Código:
- línea de Código 1-9: declaración de Variable.,
- Code line 10: Framing the SQL statement.
- línea de código 11: abrir el cursor usando DBMS_SQL.OPEN_CURSOR. Devolverá el ID del cursor que se abre.
- línea de código 12: Después de abrir el cursor, se analiza el SQL.
- línea de código 13: la variable de enlace ‘ 1001 ‘se asigna al ID del cursor en lugar de’: empno’.
- línea de código 14-17: definir el nombre de la columna en función de su posición relativa en la instrucción SQL. En nuestro caso, la posición relativa es (1) emp_name, (2) emp_no (3) salary (4) manager. Basándonos en esta posición estamos definiendo la variable objetivo.,
- línea de código 18: ejecutando la consulta usando DBMS_SQL.EJECUTAR. Devuelve el número de registros procesados.
- línea de código 19-33: obtener los registros usando un bucle y mostrarlos.
- línea de Código 20: DBMS_SQL.FETCH_ROWS obtendrá un registro de las filas procesadas. Se puede llamar repetidamente para obtener todas las filas. Si no puede obtener filas, devolverá 0, saliendo del bucle.
resumen
en esta sección, hemos discutido SQL dinámico y las formas de ejecutar SQL dinámico., También hemos visto los diferentes pasos en la ejecución del SQL dinámico en ambas formas. También hemos visto ejemplos en los que el mismo escenario se maneja tanto en NDS como en DBMS_SQL para realizar la ejecución en tiempo de ejecución.