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.