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

Jak uruchomić tworzenie tabeli DDL z EXECUTE IMMEDIATE w bazie danych Oracle?

Utwórz tabelę DDL z natychmiastowym wykonaniem

Musisz pomyśleć, co może być problemem w wykonaniu CREATE TABLE DDL? Racja, nie ma problemu, o ile wykonujesz je za pomocą SQL. Ale jeśli chodzi o wykonywanie ich w PL/SQL, jest to trochę trudne.

Po pierwsze, czym są instrukcje DDL w bazie danych Oracle?

DDL oznacza język definicji danych. Za pomocą instrukcji DDL możemy tworzyć lub modyfikować obiekty bazy danych oraz schematy. Te stwierdzenia to:

  • UTWÓRZ,
  • DROP i
  • ZMIANA.

Dobrą praktyką jest zawsze wcześniejsze rozplanowanie schematów i obiektów oraz utworzenie ich na początkowym etapie projektu. Jeśli to możliwe, powinniśmy wykonać tę pracę za pomocą SQL. To mogłoby być znacznie szybsze i czystsze. Ale czasami nie zawsze jest to możliwe, w takiej sytuacji możemy skorzystać z funkcji takich jak Native Dynamic SQL w Oracle Database.

Natywny dynamiczny SQL umożliwia nam wykonywanie instrukcji SQL, takich jak DDL lub DML, bezpośrednio w naszym PL/SQL.

Dlaczego nie możemy wykonać DDL za pomocą programu PL/SQL?

Jeśli nadal zastanawiasz się, czy wykonanie instrukcji DDL z PL/SQL jest tak skomplikowane, spróbujmy utworzyć tabelę za pomocą programu PL/SQL.

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

Wiem, że to podejście byłoby twoją pierwszą myślą, gdybym poprosił cię o utworzenie tabeli za pomocą programu PL/SQL. To znaczy, wygląda idealnie, co może pójść nie tak?

Nie ma nic złego w tym programie, jedynym problemem jest to, że PL/SQL nie obsługuje bezpośrednio instrukcji DDL. Aby wykonać instrukcję DDL przy użyciu PL/SQL, musimy skorzystać z pomocy pakietu DBMS_SQL lub zaawansowanego i ulepszonego sposobu NATIVE DYNAMIC SQL.

Możesz to sprawdzić sam. Śmiało i wykonaj powyższy program. Podczas wykonywania otrzymasz błąd, który wygląda podobnie do tego pokazanego na poniższym obrazku.

Jaki jest właściwy sposób wykonywania DDL przez program PL/SQL?

Możesz wykonać DDL za pośrednictwem programu PL/SQL albo przy użyciu pakietu DBMS_SQL, albo przy użyciu instrukcji Execute Immediate natywnego dynamicznego SQL. Ta ostatnia opcja jest najczęściej używana, szczególnie teraz dni ze względu na lepszą wydajność i łatwą do nauczenia składnię.

Jak wykonać CREATE TABLE DDL przy użyciu polecenia Execute Immediate w bazie danych Oracle?

Krok 1:Przygotuj wcześniej DDL.

Chociaż nie jest to konieczne, sugeruję wcześniejsze przygotowanie DDL, w ten sposób możesz przynajmniej wyeliminować ryzyko wystąpienia błędu składniowego ze względu na składnię instrukcji DDL.

W naszym przypadku chcemy wykonać CREATE TABLE DDL, więc najpierw napiszmy DDL do utworzenia tabeli.

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

Ta instrukcja DDL utworzy tabelę o nazwie tut_82 z dwiema kolumnami tut_num typu danych NUMBER i tut_name typu danych VARCHAR2.

Pamiętaj, aby nie kończyć instrukcji SQL (tej, którą chcesz uruchomić z EXECUTE IMMEDIATE) średnikiem.

Krok 2:Uruchom DDL przez program PL/SQL, używając polecenia Wykonaj natychmiast.

Po przygotowaniu DDL musisz napisać swój program 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;
/

W powyższym bloku PL/SQL zadeklarowaliśmy zmienną o nazwie ddl_qry. Użyliśmy tej zmiennej do przechowywania naszej instrukcji DDL, którą przygotowaliśmy w kroku 1.

Informacje:
Jedną rzeczą, którą musisz się upewnić, jest to, że zmienna, której będziesz używać do przechowywania instrukcji SQL, którą chcesz uruchomić za pomocą instrukcji EXECUTE IMMEDIATE musi zawsze mieć typ danych VARCHAR2 i mieć dużą szerokość danych aby Twoje DDL z łatwością się do niego zmieściło.

W sekcji wykonania tego bloku PL/SQL mamy dwie instrukcje wykonywalne. Te stwierdzenia to:

Oświadczenie 1:Oświadczenie o przypisaniu

W pierwszej instrukcji zapisaliśmy naszą tabelę Create Table DDL w zmiennej ddl_qry za pomocą operatora przypisania (w PL/SQL operator przypisania jest kombinacją dwukropków i znaku równości).

Oświadczenie 2:The Mighty Execute Immediate Statement

Druga instrukcja to instrukcja Execute. Aby wykonać DDL dynamicznie, musisz najpierw napisać zarezerwowaną frazę „Wykonaj natychmiast”, a następnie nazwę zmiennej, w której zapisałeś DDL, tak jak to zrobiliśmy powyżej.

Jeśli chcesz, możesz również napisać swój DDL bezpośrednio po frazie „Zarezerwowana fraza”. To całkowicie osobisty wybór. Lubię używać poprzedniego podejścia, w którym używamy zmiennej do przechowywania DDL, ponieważ przede wszystkim sprawia, że ​​kod wygląda schludnie i czysto, a ponadto znacznie ułatwia śledzenie błędów.

Ale Manish, chcę również poznać inny sposób pisania oświadczenia DDL.

Jasne, nie ma nic złego w nauce czegoś nowego.

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

Alternatywnym podejściem do powyższego kodu jest napisanie instrukcji DDL bezpośrednio w instrukcji Execute Immediate. W tym celu musisz najpierw napisać zarezerwowaną frazę Execute Immediate, a następnie instrukcję DDL, którą chcesz wykonać dynamicznie.

W każdym ze sposobów musisz zadbać o kilka rzeczy podczas pisania DDL for Execute Immediate.

Po pierwsze:zawsze umieszczaj swoją instrukcję SQL w parze pojedynczych cudzysłowów

Zawsze pamiętaj, że Execute Immediate traktuje DDL lub DML lub inne obsługiwane instrukcje SQL, które chcesz wykonać dynamicznie, jako ciąg typu danych VARCHAR2 aw PL/SQL umieszczamy dowolny znak lub ciąg VARCHAR2 w parę pojedynczych cudzysłowów. Dlatego zawsze pamiętaj, aby umieścić instrukcję SQL, którą chcesz uruchomić za pomocą funkcji Execute Immediate, w parę pojedynczych cudzysłowów.

Po drugie:zajmij się średnikiem.

Jeśli piszesz instrukcję SQL do wykonania natychmiastowego, musisz umieścić średnik (;) tuż poza pojedynczymi cudzysłowami, w których umieściłeś instrukcję SQL. Z drugiej strony, jeśli piszesz blok PL/SQL do dynamicznego wykonania za pomocą Wykonaj natychmiast, musisz umieścić średnik na końcu bloku PL/SQL tuż przed zamykającym pojedynczym cudzysłowem, a także tuż poza zamykającymi pojedynczymi cudzysłowami.

Jest to szczegółowy samouczek dotyczący uruchamiania instrukcji Create Table DDL przy użyciu instrukcji EXECUTE IMMEDIATE natywnego dynamicznego SQL w bazie danych Oracle. Mam nadzieję, że Ci się podobało i nauczyłeś się czegoś nowego.

Zasubskrybuj mój kanał YouTube, ponieważ w następnym samouczku dowiemy się czegoś nowego i interesującego o Dynamicznym SQL. Możesz też śledzić mnie na moim Twitterze i Facebooku.

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. Jak dostroić sql w Oracle

  2. Nie można wstawić Unicode za pomocą cx-Oracle

  3. Typ danych Oracle Date, przekształcony na „RRRR-MM-DD HH24:MI:SS TMZ” za pomocą SQL

  4. Co oznacza select count(1) z table_name w dowolnych tabelach bazy danych?

  5. jak zmienić datę na godzinę w Oracle 10g