Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Criar tabela DDL com execução imediata no banco de dados Oracle Parte 2

Criar tabela DDL com execução imediata


Há duas maneiras de escrever uma consulta DDL Create table para a instrução Execute Immediate de SQL dinâmico nativo no banco de dados Oracle. Já discutimos um deles no último tutorial. A primeira maneira que discutimos no tutorial anterior é provavelmente a maneira mais fácil de escrever uma consulta SQL para SQL dinâmico. Mas isso não nos impede de aprender mais. Então vamos seguir em frente e aprender o segundo.

Portanto, neste tutorial, aprenderemos o segundo método de escrever um CREATE TABLE DDL para execução dinâmica usando a instrução Execute Immediate.

Como este tutorial é uma continuação do anterior, peço-lhe que passe primeiro por esse blog para uma melhor compreensão. Dito isso, vamos começar o tutorial.

Etapa 1:prepare o DDL CREATE TABLE.


Prepare sua consulta SQL de antemão que você deseja executar dinamicamente. Isso reduzirá a confusão de código e também minimizará o erro sintático.
CREATE TABLE tut_83 ( tut_num NUMBER(5), tut_name VARCHAR2 (50), CONSTRAINT cons1_col1_pid_pk PRIMARY KEY (tut_num) )

Aqui está o nosso DDL CREATE TABLE. Exceto pelo nome alterado e uma restrição de chave primária adicionada, este DDL é bastante semelhante ao que criamos no último tutorial.

Etapa 2:escreva o bloco PL/SQL para execução dinâmica da instrução DDL.


Agora que temos nosso CREATE TABLE DDL preparado. Vamos escrever o programa PL/SQL para executá-lo dinamicamente.
SET SERVEROUTPUT ON;DECLARE ddl_qry VARCHAR2(150);BEGINddl_qry :='CREATE TABLE tut_83('|| 'tut_num NUMBER(3),'|| 'tut_name VARCHAR2(50)'|| ')';EXECUTE IMMEDIATE ddl_qry;END;/

Vamos ver o que fizemos neste programa.

A Seção de Declaração .

DECLARE ddl_qry VARCHAR2 (150);

Na seção de declaração do nosso bloco PL/SQL declaramos uma variável com o nome ddl_qry. Esta variável manterá nosso CREATE TABLE DDL que executaremos usando a instrução Execute Immediate.

Conforme o último tutorial, o Execute Immediate trata todas as instruções SQL como uma string do tipo de dados VARCHAR2. É por isso que declaramos nossa variável ddl_qry como tipo de dados VARCHAR2.

A Seção de Execução.


Logo após a seção de declaração, temos nossa seção de execução, onde toda a diversão está acontecendo.
BEGIN ddl_qry :='CREATE TABLE tut_83 ('|| 'tut_num NUMBER (5),'|| 'tut_name VARCHAR2 (50),'|| 'CONSTRAINT cons1_col1_pk PRIMARY KEY (tut_num)'|| ')'; EXECUTAR IMEDIATAMENTE ddl_qry;END;/

Esta seção de execução consiste em apenas duas instruções:
  1. Declaração de atribuição
  2. Executar declaração imediata

A primeira declaração que é a “Declaração de Atribuição” torna este código diferente do anterior. Vejamos quais são essas afirmações.

Declaração 1:Declaração de Tarefa.

ddl_qry :='CREATE TABLE tut_83 ('|| 'tut_num NUMBER (5),'|| 'tut_name VARCHAR2 (50),'|| 'CONSTRAINT cons1_col1_pk PRIMARY KEY (tut_num)'|| ')'; 
Esta é a única declaração que está tornando este programa PL/SQL diferente daquele que vimos no tutorial anterior.

Nesta declaração estamos atribuindo o CREATE TABLE DDL à variável ddl_qry. Então, o que é diferente aqui?

No método anterior, incluímos toda a nossa instrução DDL em um par de aspas simples ( ' ' ). Assim
ddl_qry:='CREATE TABLE tut_82 ( tut_num NUMBER(3), tut_name VARCHAR2 (50) )';

Primeira maneira de escrever uma consulta DDL



Considerando que aqui no segundo método, em vez de envolver toda a consulta entre aspas simples, primeiro a dividimos em várias strings de VARCHAR2. Isso fizemos colocando cada linha da consulta em aspas simples. Em seguida, juntamos todos eles usando o operador concatenar ( || ) para que o mecanismo PL/SQL os execute como uma única unidade.

Você pode assistir a uma demonstração detalhada dessa abordagem de quebra e conquista para execução dinâmica no tutorial em vídeo.

Leitura sugerida:Função Concat vs Operador Concat.

Declaração 2:execute a declaração imediata.


Nossa segunda instrução é a instrução Execute Immediate. Ele executa qualquer instrução SQL que retorne uma única linha do resultado dinamicamente. No nosso caso, esta instrução está executando uma consulta CREATE TABLE DDL através de um bloco PL/SQL.

Existem apenas duas maneiras de executar uma instrução DDL por meio de um bloco PL/SQL no Oracle Database. Ou usando o pacote DBMS_SQL ou Execute Immediate of Native Dynamic SQL. Leia aqui para saber o que mais você pode fazer usando o Execute Immediate.

Para executar um DDL dinamicamente, primeiro você deve escrever a frase reservada ‘Execute Immediate’. Seguido pelo nome da variável na qual você armazenou seu DDL como fizemos acima.

Verifique se a tabela foi criada ou não.


Existem várias maneiras de verificar se o bloco PL/SQL executou o CREATE TABLE DDL com sucesso ou não. Mas aqui vou mostrar as duas maneiras mais fáceis e populares.

Usando o comando DESCRIBE


A maneira mais fácil de verificar se o bloco PL/SQL criou a tabela tut_83 com sucesso ou não, é usando o comando DESCRIBE. O comando describe mostra a estrutura da tabela mencionada, somente se existir caso contrário retorna um erro.

Vamos tentar isso
DESCRIBE tut_83;Ou DESC tut_83

Se na execução do comando describe acima você vir a estrutura da tabela tut_83, significa que o bloco PL/SQL acima criou a tabela com sucesso. Mas no caso de você receber um erro que significa que você errou em algum lugar e a execução do bloco PL/SQL não foi bem-sucedida.

Usando o dicionário de dados ALL_OBJECTS.


Você também pode consultar o dicionário de dados ALL_OBJECTS. Isso ajuda a descobrir se a tabela desejada ou qualquer outro objeto que você está tentando criar foi criado ou não. Assim
SELECT 'Criamos uma tabela com o nome '||object_name||' em ' ||proprietário||' esquema em '||createdFROM all_objects WHERE object_name ='TUT_83';

Essas são duas entre muitas maneiras de descobrir se o objeto desejado foi criado com sucesso.

Mais uma coisa antes de encerrar este tutorial. Por favor, leia o blog anterior para uma melhor compreensão disso, bem como os próximos tutoriais.

Esse é o tutorial de PL/SQL sobre a segunda maneira de escrever um CREATE TABLE DDL para a instrução Execute Immediate de SQL dinâmico nativo no banco de dados Oracle.



Espero que tenha gostado de ler. Não deixe de se inscrever no canal do YouTube. Porque no próximo tutorial aprenderemos como descartar e modificar objetos de esquema dinamicamente.

Obrigado e tenha um ótimo dia!