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:
- Oświadczenie o przypisaniu
- 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!