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

Dynamický SQL - Kontrola syntaxe a sémantiky

EXPLAIN PLAN zkontroluje syntaxi a sémantiku téměř všech typů příkazů SQL. A na rozdíl od DBMS_SQL.PARSE implicitně nic neprovede.

Účelem plánu vysvětlení je ukázat, jak Oracle provede příkaz. Vedlejším efektem generování plánu je také kontrola syntaxe, oprávnění a obecně dělat vše kromě skutečného spuštění příkazu. Samotný plán vysvětlení je bezpředmětný a lze jej ignorovat, příkaz se spouští pouze pro kontrolu případných chyb. Dokud se nevyskytnou žádné chyby, prohlášení je platné.

Například níže uvedené bloky PL/SQL kontrolují platnost SELECT a CREATE TABLE tvrzení. Běží bez chyby, takže syntaxe je v pořádku.

begin
    execute immediate 'explain plan for select * from dual';
end;
/

begin
    execute immediate 'explain plan for create table just_some_table(a number)';
end;
/

Spuštění špatného příkazu vygeneruje chybu. Alespoň v tomto jednom testovacím případě generuje stejnou chybu, jako kdyby byl příkaz spuštěn sám.

begin
    execute immediate 'explain plan for select * from this_table_does_not_exist';
end;
/
ORA-00942: table or view does not exist
ORA-06512: at line 2

Syntaktický diagram v manuálu naznačuje, že by měl běžet pro všechny prohlášení. Zdá se však, že existuje alespoň několik typů příkazů, které nefungují, například ALTER SESSION .

begin
    execute immediate 'explain plan for alter session set optimizer_features_enable = ''11.2.0.4''';
end;
/
ORA-00900: invalid SQL statement
ORA-06512: at line 2

Mírně mimo téma – pokoušíte se vytvořit zcela obecné rozhraní SQL, jako je soukromý SQL Fiddle zabudovaný v PL/SQL? Potřebujete se starat o věci, jako je zabránit uživatelům ve spouštění určitých typů příkazů a zajistit, aby na konci nebyly středníky? Pokud ano, mohu upravit otázku, abych pomohl s některými z těchto obtížných dynamických úloh SQL.



  1. Jaká je definice mohutnosti v SQL

  2. Nelze vybrat entitu prostřednictvím identifikačních proměnných v úložišti

  3. Načtěte hierarchii rodič-dítě ze samoodkazující tabulky mysql

  4. Optimalizace MySQL na filtrování párů klíč-hodnota jako záznamů