Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Utwórz tabelę DDL z natychmiastowym wykonaniem w bazie danych Oracle, część 2

Utwórz tabelę DDL z natychmiastowym wykonaniem

Istnieją dwa sposoby napisania kwerendy DDL tworzenia tabeli w celu wykonania instrukcji natychmiastowej natywnego dynamicznego SQL w bazie danych Oracle. Jeden z nich omówiliśmy już w poprzednim samouczku. Pierwszym sposobem, który omówiliśmy w poprzednim samouczku, jest prawdopodobnie najłatwiejszy sposób napisania zapytania SQL dla Dynamic SQL. Ale to nie powstrzymuje nas od dalszej nauki. Przejdźmy więc do przodu i nauczmy się drugiego.

W tym samouczku nauczymy się drugiej metody pisania CREATE TABLE DDL dla dynamicznego wykonywania przy użyciu instrukcji Execute Immediate.

Ponieważ ten samouczek jest kontynuacją poprzedniego, proszę o przejrzenie tego bloga w celu lepszego zrozumienia. Biorąc to pod uwagę, zacznijmy samouczek.

Krok 1:Przygotuj DDL CREATE TABLE.

Przygotuj wcześniej zapytanie SQL, które chcesz wykonać dynamicznie. Zmniejszy to zamieszanie w kodzie, a także zminimalizuje błąd składniowy.

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

Oto nasz CREATE TABLE DDL. Z wyjątkiem zmienionej nazwy i dodanego ograniczenia klucza podstawowego, ten DDL jest bardzo podobny do tego, który stworzyliśmy w poprzednim samouczku.

Krok 2:Napisz blok PL/SQL do dynamicznego wykonywania instrukcji DDL.

Teraz, gdy mamy przygotowany nasz CREATE TABLE DDL. Napiszmy program PL/SQL do wykonywania go dynamicznie.

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;
/

Zobaczmy, co zrobiliśmy w tym programie.

Sekcja deklaracji .

DECLARE
    ddl_qry     VARCHAR2 (150);

W sekcji deklaracji naszego bloku PL/SQL zadeklarowaliśmy zmienną o nazwie ddl_qry. Ta zmienna będzie przechowywać nasz plik DDL CREATE TABLE, który będziemy uruchamiać za pomocą instrukcji Execute Immediate.

Zgodnie z ostatnim samouczkiem Execute Immediate traktuje wszystkie instrukcje SQL jako ciąg typu danych VARCHAR2. Dlatego zadeklarowaliśmy naszą zmienną ddl_qry jako typ danych VARCHAR2.

Sekcja wykonania.

Zaraz po sekcji deklaracji mamy sekcję egzekucji, w której dzieje się cała zabawa.

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;
/

Ta sekcja wykonania składa się tylko z dwóch instrukcji:

  1. Oświadczenie o przypisaniu
  2. Wykonaj natychmiastową instrukcję

Pierwsze oświadczenie, które jest „Oświadczeniem o przypisaniu”, odróżnia ten kod od poprzedniego. Zobaczmy, jakie są te stwierdzenia.

Oświadczenie 1:Oświadczenie o cesji.

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

Jest to jedyne stwierdzenie, które odróżnia ten program PL/SQL od tego, który widzieliśmy w poprzednim samouczku.

W tej instrukcji przypisujemy DDL CREATE TABLE do zmiennej ddl_qry. Czym więc jest tu różnica?

W poprzedniej metodzie zawarliśmy całą naszą instrukcję DDL w parę pojedynczych cudzysłowów ( ‘ ’ ). Jak to

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

Pierwszy sposób pisania zapytania DDL

Podczas gdy tutaj, w drugiej metodzie, zamiast owijać całe zapytanie w pojedyncze cudzysłowy, najpierw podzieliliśmy je na wiele ciągów VARCHAR2. Zrobiliśmy to, zawijając każdy wiersz zapytania w pojedyncze cudzysłowy. Następnie połączyliśmy je wszystkie za pomocą operatora concatenate ( || ), aby silnik PL/SQL wykonał je jako pojedynczą jednostkę.

W samouczku wideo możesz obejrzeć szczegółową demonstrację tego podejścia „przełam i podbij” do dynamicznego wykonywania.

Sugerowana lektura:funkcja Concat a operator Concat.

Oświadczenie 2:Wykonaj natychmiastowe oświadczenie.

Naszą drugą instrukcją jest instrukcja Execute Immediate. Wykonuje każdą instrukcję SQL, która dynamicznie zwraca pojedynczy wiersz wyniku. W naszym przypadku ta instrukcja wykonuje zapytanie CREATE TABLE DDL poprzez blok PL/SQL.

Istnieją tylko dwa sposoby wykonania instrukcji DDL poprzez blok PL/SQL w bazie danych Oracle. Albo za pomocą pakietu DBMS_SQL, albo Wykonaj natychmiastowe wykonanie natywnego dynamicznego SQL. Przeczytaj tutaj, aby dowiedzieć się, co jeszcze możesz zrobić, korzystając z funkcji Execute Immediate.

Aby wykonać DDL dynamicznie, musisz najpierw napisać zarezerwowaną frazę „Wykonaj natychmiast”. Po którym następuje nazwa zmiennej, w której zapisałeś swój DDL, tak jak to zrobiliśmy powyżej.

Sprawdź, czy tabela została utworzona, czy nie.

Istnieje wiele sposobów sprawdzenia, czy blok PL/SQL wykonał pomyślnie CREATE TABLE DDL, czy nie. Ale tutaj pokażę ci dwa najłatwiejsze i popularne sposoby.

Korzystanie z polecenia DESCRIBE

Najprostszym sposobem sprawdzenia, czy blok PL/SQL pomyślnie utworzył tabelę tut_83, czy nie, jest użycie polecenia DESCRIBE. Polecenie Opisz pokazuje strukturę wspomnianej tabeli, tylko jeśli istnieje, w przeciwnym razie zwraca błąd.

Spróbujmy tego

DESCRIBE tut_83;
Or 
DESC tut_83

Jeśli po wykonaniu powyższego polecenia opisu zobaczysz strukturę tabeli tut_83, oznacza to, że powyższy blok PL/SQL pomyślnie utworzył tabelę. Ale w przypadku, gdy pojawi się błąd, oznacza to, że gdzieś pomieszałeś i wykonanie bloku PL/SQL nie powiodło się.

Korzystanie ze słownika danych ALL_OBJECTS.

Możesz również wysłać zapytanie do słownika danych ALL_OBJECTS. Pomaga to dowiedzieć się, czy pożądana tabela lub jakikolwiek inny obiekt, który próbujesz utworzyć, został utworzony, czy nie. Lubię to

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

Są to dwa spośród wielu sposobów sprawdzenia, czy żądany obiekt został pomyślnie utworzony.

Jeszcze jedna rzecz przed zakończeniem tego samouczka. Prosimy o przeczytanie poprzedniego bloga, aby lepiej to zrozumieć, a także nadchodzących samouczków.

To jest samouczek PL/SQL dotyczący drugiego sposobu pisania instrukcji CREATE TABLE DDL dla instrukcji Execute Immediate natywnego dynamicznego SQL w bazie danych Oracle.

Mam nadzieję, że podobało Ci się czytanie. Pamiętaj, aby subskrybować kanał YouTube. Ponieważ w następnym samouczku nauczymy się, jak dynamicznie upuszczać i modyfikować obiekty schematu.

Dzięki i życzę miłego dnia!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Migracja danych między różnymi DBMS

  2. Encja Oracle w ramach encji VS nie aktualizuje klucza podstawowego w kodzie

  3. Jak obliczyć rozmiar tabel w Oracle?

  4. Oracle wstawia, jeśli wiersz nie istnieje

  5. Jak mogę potwierdzić, że baza danych to Oracle i jakiej wersji używa SQL?