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

Crear tabla DDL con ejecución inmediata en Oracle Database Parte 2

Crear tabla DDL con ejecución inmediata

Hay dos formas de escribir una consulta DDL de creación de tabla para la instrucción de ejecución inmediata de SQL dinámico nativo en la base de datos de Oracle. Ya hemos discutido uno de ellos en el último tutorial. La primera forma que discutimos en el tutorial anterior es probablemente la forma más fácil de escribir una consulta SQL para Dynamic SQL. Pero eso no impide que sigamos aprendiendo. Así que avancemos y aprendamos el segundo.

Entonces, en este tutorial, aprenderemos el segundo método para escribir un DDL CREAR TABLA para ejecución dinámica usando Ejecutar instrucción inmediata.

Como este tutorial es una continuación del anterior, le pido que primero revise ese blog para una mejor comprensión. Dicho esto, comencemos el tutorial.

Paso 1:preparar el DDL CREAR TABLA.

Prepare su consulta SQL de antemano que desea ejecutar dinámicamente. Esto reducirá la confusión del código y también minimizará el error sintáctico.

CREATE TABLE tut_83 (
                tut_num     NUMBER(5),
                tut_name    VARCHAR2 (50),
                CONSTRAINT cons1_col1_pid_pk PRIMARY KEY (tut_num)
                )

Aquí está nuestro CREATE TABLE DDL. Excepto por el cambio de nombre y una restricción de clave principal agregada, este DDL es bastante similar al que creamos en el último tutorial.

Paso 2:escribir el bloque PL/SQL para la ejecución dinámica de la instrucción DDL.

Ahora que tenemos nuestro CREATE TABLE DDL preparado. Escribamos el programa PL/SQL para ejecutarlo dinámicamente.

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

Veamos qué hicimos en este programa.

La Sección de Declaración .

DECLARE
    ddl_qry     VARCHAR2 (150);

En la sección de declaración de nuestro bloque PL/SQL declaramos una variable con el nombre ddl_qry. Esta variable contendrá nuestro CREATE TABLE DDL que ejecutaremos mediante la instrucción Execute Immediate.

Según el último tutorial, Execute Immediate trata todas las declaraciones SQL como una cadena de tipo de datos VARCHAR2. Es por eso que declaramos nuestra variable ddl_qry como tipo de datos VARCHAR2.

La Sección de Ejecución.

Inmediatamente después de la sección de declaración, tenemos nuestra sección de ejecución, donde ocurre toda la diversión.

BEGIN
    ddl_qry :=  'CREATE TABLE tut_83 ('||
                    'tut_num     NUMBER (5),'||
                    'tut_name    VARCHAR2 (50),'||
                    'CONSTRAINT cons1_col1_pk PRIMARY KEY (tut_num)'||
                ')';
    EXECUTE IMMEDIATE ddl_qry;
END;
/

Esta sección de ejecución consta de solo dos sentencias:

  1. Declaración de asignación
  2. Ejecutar instrucción inmediata

La primera declaración, que es la "Declaración de asignación", hace que este código sea diferente del anterior. Veamos cuáles son estas afirmaciones.

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

ddl_qry :=  'CREATE TABLE tut_83 ('||
                    'tut_num     NUMBER (5),'||
                    'tut_name    VARCHAR2 (50),'||
                    'CONSTRAINT cons1_col1_pk PRIMARY KEY (tut_num)'||
                ')';

Esta es la única declaración que hace que este programa PL/SQL sea diferente del que vimos en el tutorial anterior.

En esta declaración estamos asignando CREATE TABLE DDL a la variable ddl_qry. Entonces, ¿qué es diferente aquí?

En el método anterior, encerramos toda nuestra instrucción DDL en un par de comillas simples (' '). Me gusta

ddl_qry:= 'CREATE TABLE tut_82 (
                tut_num     NUMBER(3),
               	tut_name    VARCHAR2 (50)
               )';

Primera forma de escribir una consulta DDL

Mientras que aquí, en el segundo método, en lugar de envolver toda la consulta entre comillas simples, primero la dividimos en varias cadenas de VARCHAR2. Esto lo hicimos envolviendo cada línea de la consulta en comillas simples. A partir de entonces, los unimos a todos usando el operador de concatenación ( || ) para que el motor PL/SQL los ejecute como una sola unidad.

Puede ver una demostración detallada de este enfoque de ruptura y conquista para la ejecución dinámica en el tutorial de video.

Lectura sugerida:Función Concat Vs Operador Concat.

Declaración 2:Ejecutar declaración inmediata.

Nuestra segunda declaración es la instrucción Ejecutar inmediatamente. Ejecuta cualquier instrucción SQL que devuelve dinámicamente una sola fila del resultado. En nuestro caso, esta declaración está ejecutando una consulta CREATE TABLE DDL a través de un bloque PL/SQL.

Solo hay dos formas de ejecutar una declaración DDL a través de un bloque PL/SQL en Oracle Database. Ya sea mediante el uso del paquete DBMS_SQL o la ejecución inmediata de SQL dinámico nativo. Lea aquí para saber qué más puede hacer con Ejecutar inmediatamente.

Para ejecutar un DDL dinámicamente, primero debe escribir la frase reservada 'Ejecutar inmediatamente'. Seguido del nombre de la variable en la que almacenó su DDL como hicimos anteriormente.

Comprueba si la tabla está creada o no.

Hay varias formas de verificar si el bloque PL/SQL ejecutó CREATE TABLE DDL con éxito o no. Pero aquí te mostraré las dos formas más fáciles y populares.

Uso del comando DESCRIBE

La forma más fácil de verificar si el bloque PL/SQL ha creado la tabla tut_83 con éxito o no, es usando el comando DESCRIBE. El comando Describir muestra la estructura de la tabla mencionada, solo si existe, de lo contrario devuelve un error.

Probemos eso

DESCRIBE tut_83;
Or 
DESC tut_83

Si al ejecutar el comando de descripción anterior ve la estructura de la tabla tut_83, significa que el bloque PL/SQL anterior ha creado la tabla con éxito. Pero en caso de que obtenga un error, eso significa que cometió un error en alguna parte y la ejecución del bloque PL/SQL no es exitosa.

Uso del diccionario de datos ALL_OBJECTS.

También puede consultar el diccionario de datos ALL_OBJECTS. Esto ayuda a averiguar si la tabla deseada o cualquier otro objeto que está tratando de crear se crea o no. Me gusta

SELECT 'We created a table with name '||object_name||' in '
        ||owner||' schema on '||created
FROM all_objects WHERE object_name ='TUT_83';

Estas son dos de las muchas formas de averiguar si el objeto deseado se creó correctamente.

Una cosa más antes de terminar este tutorial. Lea el blog anterior para comprender mejor esto, así como los próximos tutoriales.

Ese es el tutorial de PL/SQL sobre la segunda forma de escribir un CREATE TABLE DDL para Ejecutar declaración inmediata de Native Dynamic SQL en Oracle Database.

Espero que hayas disfrutado leyendo. Asegúrate de suscribirte al canal de YouTube. Porque en el próximo tutorial aprenderemos a soltar y modificar objetos de esquema dinámicamente.

¡Gracias y que tengas un gran día!