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

Jak spustit Create Table DDL s EXECUTE IMMEDIATE v Oracle Database

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

Musíte si myslet, že v čem by mohl být problém při provádění CREATE TABLE DDL? Správně, žádný problém, pokud je spouštíte pomocí SQL. Ale pokud jde o jejich spouštění pomocí PL/SQL, pak je to docela těžké.

Takže nejprve, co jsou příkazy DDL v databázi Oracle?

DDL je zkratka pro Data Definition Language. Pomocí příkazů DDL můžeme vytvářet nebo upravovat databázové objekty i schémata. Tato prohlášení jsou:

  • VYTVOŘIT,
  • DROP and
  • ZMĚNIT.

Vždy je dobrým zvykem rozmístit si schémata a objekty předem a vytvořit je v počáteční fázi projektu. Pokud je to možné, měli bychom tuto práci provádět pomocí SQL. Mohlo by to být mnohem rychlejší a čistší. Ale někdy to není vždy možné, v takové situaci můžeme využít funkce jako Native Dynamic SQL v Oracle Database.

Nativní dynamické SQL nám umožňuje spouštět příkazy SQL jako DDL nebo DML přímo prostřednictvím našeho PL/SQL.

Proč nemůžeme spustit DDL prostřednictvím programu PL/SQL?

Pokud stále přemýšlíte, zda je provádění příkazu DDL pomocí PL/SQL tak složité, zkuste vytvořit tabulku pomocí programu PL/SQL.

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

Vím, že tento přístup by byl vaší první myšlenkou, kdybych vás požádal o vytvoření tabulky pomocí programu PL/SQL. Myslím, že to vypadá perfektně, co by se mohlo pokazit?

S tímto programem není nic špatného, ​​jediný problém je, že PL/SQL přímo nepodporuje příkazy DDL. Abychom mohli provést příkaz DDL pomocí PL/SQL, potřebujeme buď pomoci balíčku DBMS_SQL nebo pokročilého a vylepšeného způsobu NATIVE DYNAMIC SQL.

Můžete se o tom přesvědčit sami. Pokračujte a spusťte výše uvedený program. Při spuštění se zobrazí chyba, která vypadá podobně jako na obrázku níže.

Jaký je tedy správný způsob provádění DDL prostřednictvím programu PL/SQL?

DDL prostřednictvím programu PL/SQL můžete spustit buď pomocí balíčku DBMS_SQL, nebo pomocí příkazu Execute Immediate nativního dynamického SQL. Poslední možnost je nejpoužívanější, zvláště nyní kvůli jejímu lepšímu výkonu a snadnému naučení syntaxe.

Jak spustit CREATE TABLE DDL pomocí Execute Immediate v databázi Oracle?

Krok 1:Připravte si DDL předem.

I když to není nutné, doporučuji vám připravit si DDL předem, abyste tak alespoň eliminovali možnost získání syntaktické chyby kvůli syntaxi vašeho příkazu DDL.

V našem případě chceme provést CREATE TABLE DDL, takže nejprve napíšeme DDL pro vytvoření tabulky.

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

Tento příkaz DDL vytvoří tabulku s názvem tut_82 se dvěma sloupci tut_num datového typu NUMBER a tut_name datového typu VARCHAR2.

V tomto případě nezakončujte svůj SQL příkaz (ten, který chcete spustit příkazem EXECUTE IMMEDIATE) středníkem.

Krok 2:Spusťte svůj DDL prostřednictvím programu PL/SQL pomocí Execute Immediate.

Jakmile budete mít svůj DDL připraven, musíte napsat svůj PL/SQL program.

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

Ve výše uvedeném bloku PL/SQL jsme deklarovali proměnnou s názvem ddl_qry. Tuto proměnnou jsme použili pro uložení našeho příkazu DDL, který jsme připravili v kroku 1.

Informace:
Jedna věc, kterou se zde musíte ujistit, je, že proměnná, kterou budete používat pro uložení příkazu SQL, který chcete spustit s příkazem EXECUTE IMMEDIATE, musí být vždy datového typu VARCHAR2 a mají velkou šířku dat aby se do něj váš DDL snadno vešel.

V sekci provádění tohoto bloku PL/SQL máme dva spustitelné příkazy. Tato prohlášení jsou:

Prohlášení 1:Prohlášení o přiřazení

V prvním příkazu jsme uložili naši Create Table DDL do proměnné ddl_qry pomocí operátoru přiřazení (v PL/SQL je operátor přiřazení kombinací dvojteček a znaménka rovného).

Prohlášení 2:The Mighty Execute Okamžité prohlášení

Druhý příkaz je příkaz Execute. Chcete-li dynamicky spustit DDL, musíte nejprve napsat vyhrazenou frázi ‚Execute Immediate‘ následovanou názvem proměnné, do které jste uložili svůj DDL, jak jsme to udělali výše.

Pokud chcete, můžete také napsat svůj DDL přímo za frázi „Reserved Phrase“. Je to zcela osobní volba. Rád používám předchozí přístup, kdy používáme proměnnou pro držení DDL, protože v první řadě to dělá váš kód úhledným a čistým a navíc to také výrazně usnadňuje sledování chyb.

Ale Manishi, chci se naučit i jiný způsob psaní příkazu DDL.

Jistě, není nic špatného na tom, naučit se něco nového.

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

Alternativním přístupem k výše uvedenému kódu je napsat příkaz DDL přímo do příkazu Execute Immediate. K tomu musíte nejprve napsat vyhrazenou frázi Execute Immediate následovanou příkazem DDL, který chcete provést dynamicky.

V obou případech se při psaní DDL pro Execute Immediate musíte postarat o několik věcí.

Za prvé:Příkaz SQL vždy uzavřete do dvojice jednoduchých uvozovek

Vždy pamatujte, že Execute Immediate považuje příkazy DDL nebo DML nebo jakékoli jiné podporované příkazy SQL, které chcete dynamicky provádět, jako řetězec datového typu VARCHAR2 a v PL/SQL uzavřeme libovolný znak nebo řetězec VARCHAR2 do dvojice jednoduchých uvozovek. Vždy se tedy ujistěte, že svůj příkaz SQL, který chcete spustit pomocí Execute Immediate, uzavřete do jednoduchých uvozovek.

Za druhé:Postarejte se o středník.

V případě, že píšete SQL příkaz pro Execute Immediate, musíte středník (;) umístit přímo za jednoduché uvozovky, do kterých jste uzavřeli svůj SQL příkaz. Na druhou stranu, pokud píšete PL/SQL blok pro dynamické provádění pomocí Execute Immediate, musíte středník umístit na konec vašeho PL/SQL bloku těsně před uzavírací jednoduchou uvozovku a také těsně mimo uzavírací jednoduché uvozovky.

Toto je podrobný návod, jak spustit příkaz Create Table DDL pomocí příkazu EXECUTE IMMEDIATE nativního dynamického SQL v databázi Oracle. Doufám, že se vám to líbilo a naučili jste se něco nového.

Nezapomeňte se přihlásit k odběru mého kanálu YouTube, protože v příštím tutoriálu se dozvíme něco nového a zajímavého o dynamickém SQL. Můžete mě také sledovat na mém Twitteru a Facebooku.

Děkuji a přeji hezký den!


  1. K-Nearest Neighbor Query v PostGIS

  2. Jak mohu VYBRAT více sloupců v CASE WHEN na SQL Server?

  3. Kdy se řazení SQL Server přetočí?

  4. Online kontrola syntaxe SQL vyhovující více databázím