sql >> Databáze >  >> RDS >> Oracle

Vytvořte tabulku DDL s okamžitým spuštěním v databázi Oracle, část 2

Vytvořte tabulku DDL s okamžitým spuštěním

Existují dva způsoby psaní dotazu Create table DDL pro příkaz Execute Immediate nativního dynamického SQL v databázi Oracle. Jeden z nich jsme již probrali v minulém tutoriálu. První způsob, který jsme probrali v předchozím tutoriálu, je pravděpodobně nejjednodušší způsob psaní SQL dotazu pro dynamické SQL. To nám ale nebrání učit se dál. Takže pojďme dál a naučme se to druhé.

V tomto tutoriálu se tedy naučíme druhou metodu psaní CREATE TABLE DDL pro dynamické spouštění pomocí Execute Immediate Statement.

Protože tento tutoriál navazuje na předchozí, žádám vás, abyste si pro lepší pochopení nejprve prošli tento blog. Jak již bylo řečeno, začněme s výukovým programem.

Krok 1:Připravte CREATE TABLE DDL.

Předem si připravte svůj SQL dotaz, který chcete provádět dynamicky. To sníží zmatek kódu a také minimalizuje syntaktickou chybu.

CREATE TABLE tut_83 ( tut_num NUMBER(5), tut_name VARCHAR2 (50), CONSTRAINT cons1_col1_pid_pk PRIMÁRNÍ KLÍČ (tut_num) )

Zde je naše CREATE TABLE DDL. Kromě změněného názvu a přidaného omezení primárního klíče je tento DDL do značné míry podobný tomu, který jsme vytvořili v minulém tutoriálu.

Krok 2:Napište blok PL/SQL pro dynamické provádění příkazu DDL.

Nyní, když máme připravenou CREATE TABLE DDL. Pojďme napsat program PL/SQL pro jeho dynamické spouštění.

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

Podívejme se, co jsme v tomto programu dělali.

Sekce prohlášení .

DECLARE ddl_qry VARCHAR2 (150);

V deklarační sekci našeho PL/SQL bloku jsme deklarovali proměnnou s názvem ddl_qry. Tato proměnná bude obsahovat naši CREATE TABLE DDL, kterou budeme spouštět pomocí příkazu Execute Immediate.

Podle posledního kurzu Execute Immediate zachází se všemi příkazy SQL jako s řetězcem datového typu VARCHAR2. Proto jsme naši proměnnou ddl_qry deklarovali jako datový typ VARCHAR2.

Sekce provádění.

Hned po sekci prohlášení máme sekci provádění, kde se odehrává veškerá legrace.

BEGIN ddl_qry :='CREATE TABLE tut_83 ('|| 'tut_num NUMBER (5),'|| 'tut_name VARCHAR2 (50),'|| 'CONSTRAINT cons1_col1_pk PRIMARY KEY (tut_num)'|| ')'; PROVEĎ OKAMŽITĚ ddl_qry;END;/

Tato sekce provádění se skládá pouze ze dvou příkazů:

  1. Prohlášení o postoupení
  2. Provést okamžité prohlášení

První příkaz, kterým je „Prohlášení o přiřazení“, odlišuje tento kód od předchozího. Podívejme se, jaká jsou tato prohlášení.

Prohlášení 1:Prohlášení o postoupení.

ddl_qry :='CREATE TABLE tut_83 ('|| 'tut_num NUMBER (5),'|| 'tut_name VARCHAR2 (50),'|| 'CONSTRAINT cons1_col1_pk PRIMÁRNÍ KLÍČ (tut_num)'|| ')'; 

Toto je jediné prohlášení, které dělá tento PL/SQL program odlišný od toho, který jsme viděli v předchozím tutoriálu.

V tomto příkazu přiřazujeme CREATE TABLE DDL proměnné ddl_qry. V čem je tedy rozdíl?

V předchozí metodě jsme celý náš příkaz DDL uzavřeli do dvojice jednoduchých uvozovek ( ' ). Takhle

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

První způsob psaní DDL dotazu

Zatímco zde ve druhé metodě místo zabalení celého dotazu do jednoduchých uvozovek jsme jej nejprve rozdělili do více řetězců VARCHAR2. Toho jsme dosáhli zabalením každého jednotlivého řádku dotazu do jednoduchých uvozovek. Poté jsme je všechny spojili pomocí operátoru zřetězení ( || ), takže je PL/SQL engine zpracuje jako jednu jednotku.

Na podrobnou demonstraci tohoto přístupu k dynamickému provedení break and dobyj se můžete podívat ve video tutoriálu.

Doporučená četba:Funkce Concat versus operátor Concat.

Prohlášení 2:Proveďte okamžité prohlášení.

Náš druhý příkaz je příkaz Execute Immediate. Provede jakýkoli příkaz SQL, který dynamicky vrátí jeden řádek výsledku. V našem případě tento příkaz provádí dotaz CREATE TABLE DDL prostřednictvím bloku PL/SQL.

Existují pouze dva způsoby, jak provést příkaz DDL prostřednictvím bloku PL/SQL v databázi Oracle. Buď pomocí balíčku DBMS_SQL nebo Execute Immediate of Native Dynamic SQL. Zde si přečtěte, co dalšího můžete dělat pomocí Execute Immediate.

Chcete-li provést DDL dynamicky, musíte nejprve napsat vyhrazenou frázi ‚Execute Immediate‘. Následuje název proměnné, do které jste uložili svůj DDL, jak jsme to udělali výše.

Zkontrolujte, zda je tabulka vytvořena či nikoli.

Existuje několik způsobů, jak zkontrolovat, zda blok PL/SQL provedl CREATE TABLE DDL úspěšně nebo ne. Ale zde vám ukážu dva nejjednodušší a oblíbené způsoby.

Použití příkazu DESCRIBE

Nejjednodušší způsob, jak zkontrolovat, zda blok PL/SQL vytvořil tabulku tut_83 úspěšně nebo ne, je pomocí příkazu DESCRIBE. Příkaz Describe zobrazuje strukturu uvedené tabulky, pouze pokud existuje, jinak vrací chybu.

Zkusme to

DESCRIBE tut_83;Nebo DESC tut_83

Pokud při provádění výše uvedeného příkazu description vidíte strukturu tabulky tut_83, znamená to, že výše uvedený PL/SQL blok úspěšně vytvořil tabulku. Ale v případě, že se vám zobrazí chyba, znamená to, že jste se někde spletli a provedení bloku PL/SQL není úspěšné.

Použití datového slovníku ALL_OBJECTS.

Můžete se také dotazovat na datový slovník ALL_OBJECTS. To pomáhá zjistit, zda je požadovaná tabulka nebo jakýkoli jiný objekt, který se pokoušíte vytvořit, vytvořen nebo ne. Takhle

SELECT 'Vytvořili jsme tabulku s názvem '||název_objektu||' v ' ||owner||' schéma na '||createdFROM all_objects WHERE object_name ='TUT_83';

Toto jsou dva z mnoha způsobů, jak zjistit, zda byl požadovaný objekt úspěšně vytvořen.

Ještě jedna věc před ukončením tohoto návodu. Přečtěte si prosím předchozí blog, abyste tomu lépe porozuměli, stejně jako nadcházející tutoriály.

Toto je výukový program PL/SQL o druhém způsobu psaní CREATE TABLE DDL pro Execute Immediate nativního dynamického SQL v databázi Oracle.

Doufám, že se vám čtení líbilo. Nezapomeňte se přihlásit k odběru kanálu YouTube. Protože v příštím tutoriálu se naučíme, jak dynamicky rušit a upravovat objekty schématu.

Děkuji a přeji hezký den!


  1. Rámec Apache Spark Job Run!

  2. Příklady JSON_CONTAINS() v MySQL

  3. SQL Server:Všechna velká a malá písmena nastavte na správná malá a velká písmena

  4. Vytvořte sloupec kumulativního součtu v MySQL