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

Cómo ejecutar Create Table DDL con EXECUTE IMMEDIATE en Oracle Database

Crear tabla DDL con ejecución inmediata

Debe estar pensando cuál podría ser el problema al ejecutar un CREATE TABLE DDL? Correcto, no hay problema siempre que los ejecute con SQL. Pero cuando se trata de ejecutarlos con PL/SQL, es un poco difícil.

Primero, ¿qué son las declaraciones DDL en Oracle Database?

DDL significa Lenguaje de definición de datos. Usando declaraciones DDL podemos crear o modificar los objetos de la base de datos, así como los esquemas. Estas declaraciones son:

  • CREAR,
  • SOLTAR y
  • CAMBIAR.

Siempre es una buena práctica diseñar sus esquemas y objetos de antemano y crearlos en la etapa inicial de su proyecto. Si es posible, deberíamos hacer este trabajo usando SQL. Eso podría ser mucho más rápido y más limpio. Pero a veces no siempre es posible, en esa situación podemos tomar la ayuda de funciones como Native Dynamic SQL en Oracle Database.

Native Dynamic SQL nos permite ejecutar instrucciones SQL como DDL o DML directamente a través de nuestro PL/SQL.

¿Por qué no podemos ejecutar DDL a través de un programa PL/SQL?

Si aún se pregunta si ejecutar una instrucción DDL con PL/SQL es tan complicado, intentemos crear una tabla a través de un programa PL/SQL.

SET SERVEROUTPUT ON;
BEGIN 
    CREATE TABLE tut_82 (
    tut_num NUMBER(3),
    tut_name   VARCHAR2 (50));  
END;
/

Sé que este enfoque habría sido su primer pensamiento si le hubiera pedido que creara una tabla a través de un programa PL/SQL. Quiero decir, esto se ve perfecto, ¿qué podría salir mal?

No hay nada malo con este programa, el único problema aquí es que PL/SQL no soporta directamente declaraciones DDL. Para ejecutar una instrucción DDL utilizando PL/SQL, necesitamos la ayuda del paquete DBMS_SQL o la forma avanzada y mejorada de NATIVE DYNAMIC SQL.

Puedes comprobar esto por ti mismo. Continúe y ejecute el programa anterior. Al ejecutarlo, obtendrá un error que se parece al que se muestra en la imagen a continuación.

Entonces, ¿cuál es la forma correcta de ejecutar un DDL a través de un programa PL/SQL?

Puede ejecutar un programa DDL a través de PL/SQL utilizando el paquete DBMS_SQL o utilizando la instrucción Execute Immediate de Native Dynamic SQL. Esta última opción es la más utilizada, especialmente en la actualidad debido a su mejor rendimiento y fácil aprendizaje de la sintaxis.

¿Cómo ejecutar CREATE TABLE DDL usando Execute Immediate en Oracle Database?

Paso 1:Prepare su DDL de antemano.

Aunque no es necesario, le sugiero que prepare su DDL de antemano, de esa manera al menos puede eliminar las posibilidades de obtener un error sintáctico debido a la sintaxis de su declaración DDL.

En nuestro caso, queremos ejecutar CREATE TABLE DDL, así que primero escribamos un DDL para crear una tabla.

CREATE TABLE tut_82 (
    tut_num    NUMBER (3),
    tut_name   VARCHAR2 (50)
) 

Esta instrucción DDL creará una tabla con el nombre tut_82 con dos columnas tut_num de tipo de datos NÚMERO y tut_name de tipo de datos VARCHAR2.

Tenga en cuenta que no termine su instrucción SQL (la que desea ejecutar con EXECUTE IMMEDIATE) con un punto y coma.

Paso 2:Ejecute su DDL a través del programa PL/SQL utilizando Ejecutar inmediatamente.

Una vez que haya preparado su DDL, debe escribir su programa PL/SQL.

SET SERVEROUTPUT ON;
DECLARE
    ddl_qry     VARCHAR2 (150);
BEGIN
    ddl_qry := 'CREATE TABLE tut_82(
                tut_num     NUMBER(3),
                tut_name    VARCHAR2(50)
                )';
    EXECUTE IMMEDIATE ddl_qry;
END;
/

En el bloque PL/SQL anterior declaramos una variable con el nombre ddl_qry. Usamos esta variable para mantener nuestra declaración DDL que preparamos en el paso 1.

Información:
Una cosa de la que debe asegurarse aquí es que la variable que usará para contener la instrucción SQL que desea ejecutar con su instrucción EXECUTE IMMEDIATE siempre debe ser del tipo de datos VARCHAR2 y tiene mucho ancho de datos para que su DDL pueda caber fácilmente en él.

En la sección de ejecución de este bloque PL/SQL tenemos dos sentencias ejecutables. Estas declaraciones son:

Declaración 1:Declaración de asignación

En la primera declaración, hemos almacenado nuestro DDL de creación de tabla en la variable ddl_qry usando el operador de asignación (en PL/SQL, el operador de asignación es la combinación de dos puntos y el signo igual).

Declaración 2:El poderoso Ejecutar declaración inmediata

La segunda instrucción es la instrucción de ejecución. Para ejecutar un DDL de forma dinámica, primero debe escribir la frase reservada "Ejecutar inmediatamente" seguida del nombre de la variable en la que almacenó su DDL como hicimos anteriormente.

Si lo desea, también puede escribir su DDL directamente después de la frase "Frase reservada". Es completamente una elección personal. Me gusta usar el enfoque anterior en el que usamos Variable para mantener el DDL porque, en primer lugar, hace que su código se vea limpio y ordenado, además, también hace que el seguimiento de errores sea mucho más fácil.

Pero Manish, también quiero aprender la otra forma de escribir la instrucción DDL.

Claro, no hay nada de malo en aprender algo nuevo.

BEGIN
    EXECUTE IMMEDIATE 'CREATE TABLE tut_82(
                	tut_num     NUMBER(3),
                	tut_name    VARCHAR2(50)
                )';
END;
/

El enfoque alternativo al código anterior es escribir la declaración DDL directamente dentro de su declaración Ejecutar inmediatamente. Para esto, solo tiene que escribir primero la frase reservada Execute Immediate seguida de la declaración DDL que desea ejecutar dinámicamente.

En cualquiera de las formas, solo tiene que ocuparse de algunas cosas mientras escribe el DDL para Ejecutar de inmediato.

Primero:siempre incluya su instrucción SQL entre comillas simples

Recuerde siempre que Execute Immediate trata DDL o DML o cualquier otra instrucción SQL admitida que desee ejecutar dinámicamente como una cadena de tipo de datos VARCHAR2 y en PL/SQL encerramos cualquier carácter o cadena VARCHAR2 en un par de comillas simples. Por lo tanto, asegúrese siempre de incluir la declaración SQL que desea ejecutar con Ejecutar inmediatamente entre comillas simples.

Segundo:cuidar el punto y coma.

En caso de que esté escribiendo una declaración SQL para Ejecutar inmediatamente, debe colocar el punto y coma (;) justo fuera de las comillas simples en las que incluyó su declaración SQL. Por otro lado, si está escribiendo un bloque PL/SQL para ejecución dinámica utilizando Ejecutar inmediatamente, debe colocar el punto y coma al final de su bloque PL/SQL justo antes de la comilla simple de cierre, así como justo fuera de las comillas simples de cierre.

Ese es el tutorial detallado sobre cómo ejecutar la declaración DDL de Create Table usando la declaración EXECUTE IMMEDIATE de Native Dynamic SQL en Oracle Database. Espero que lo hayas disfrutado y aprendido algo nuevo.

Asegúrese de suscribirse a mi canal de YouTube, ya que en el próximo tutorial aprenderemos algo nuevo e interesante sobre Dynamic SQL. También puedes seguirme en mi Twitter y Facebook.

¡Gracias y que tengas un gran día!