EXPLAIN PLAN
sẽ kiểm tra cú pháp và ngữ nghĩa của hầu hết các loại câu lệnh SQL. Và không giống như DBMS_SQL.PARSE
nó sẽ không thực thi bất cứ điều gì.
Mục đích của kế hoạch giải thích là chỉ ra cách Oracle sẽ thực thi một câu lệnh. Như một tác dụng phụ của việc tạo kế hoạch, nó cũng phải kiểm tra cú pháp, đặc quyền và thường làm mọi thứ ngoại trừ thực sự chạy câu lệnh. Bản thân kế hoạch giải thích là vô nghĩa và có thể bị bỏ qua, câu lệnh chỉ được chạy để kiểm tra bất kỳ lỗi nào. Miễn là không có lỗi, tuyên bố hợp lệ.
Ví dụ:các khối PL / SQL bên dưới kiểm tra tính hợp lệ của SELECT
câu lệnh và CREATE TABLE
bản tường trình. Chúng chạy không có lỗi nên cú pháp ổn.
begin
execute immediate 'explain plan for select * from dual';
end;
/
begin
execute immediate 'explain plan for create table just_some_table(a number)';
end;
/
Chạy một câu lệnh không hợp lệ sẽ tạo ra lỗi. Trong ít nhất một trường hợp thử nghiệm này, nó tạo ra lỗi giống như khi câu lệnh được chạy bởi chính nó.
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
Sơ đồ cú pháp trong sách hướng dẫn ngụ ý rằng nó sẽ chạy cho tất cả các câu lệnh. Tuy nhiên, dường như có ít nhất một vài loại câu lệnh không hoạt động, chẳng hạn như 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
Hơi lạc đề - bạn đang cố gắng xây dựng một giao diện SQL hoàn toàn chung chung, giống như một SQL Fiddle riêng được xây dựng trong PL / SQL? Bạn có cần phải lo lắng về những thứ như ngăn người dùng cố gắng chạy một số loại câu lệnh nhất định và đảm bảo không có dấu chấm phẩy ở cuối không? Nếu vậy, tôi có thể chỉnh sửa câu hỏi để giúp giải quyết một số tác vụ SQL động khó khăn đó.