EXPLAIN PLAN
akan memeriksa sintaks dan semantik dari hampir semua jenis pernyataan SQL. Dan tidak seperti DBMS_SQL.PARSE
itu tidak akan mengeksekusi apa pun secara implisit.
Inti dari rencana penjelasan adalah untuk menunjukkan bagaimana Oracle akan mengeksekusi sebuah pernyataan. Sebagai efek samping dari pembuatan rencana itu juga harus memeriksa sintaks, hak istimewa, dan umumnya melakukan segalanya kecuali benar-benar menjalankan pernyataan. Rencana penjelasan itu sendiri tidak ada gunanya dan dapat diabaikan, pernyataan itu hanya dijalankan untuk memeriksa kesalahan apa pun. Selama tidak ada kesalahan, pernyataan tersebut valid.
Misalnya, blok PL/SQL di bawah ini memeriksa validitas SELECT
pernyataan dan CREATE TABLE
penyataan. Mereka berjalan tanpa kesalahan sehingga sintaksnya baik-baik saja.
begin
execute immediate 'explain plan for select * from dual';
end;
/
begin
execute immediate 'explain plan for create table just_some_table(a number)';
end;
/
Menjalankan pernyataan yang buruk akan menghasilkan kesalahan. Setidaknya dalam satu kasus uji ini, ini menghasilkan kesalahan yang sama seperti jika pernyataan dijalankan dengan sendirinya.
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
Diagram sintaks dalam manual menyiratkan itu harus dijalankan untuk semua pernyataan. Namun, tampaknya ada setidaknya beberapa jenis pernyataan yang tidak berfungsi, seperti 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
Sedikit di luar topik - apakah Anda mencoba membangun antarmuka SQL yang sepenuhnya generik, seperti SQL Fiddle pribadi yang dibangun di PL/SQL? Apakah Anda perlu khawatir tentang hal-hal seperti mencegah pengguna mencoba menjalankan jenis pernyataan tertentu, dan memastikan tidak ada tanda titik koma? Jika demikian, saya dapat mengedit pertanyaan untuk membantu beberapa tugas SQL dinamis yang sulit.