PL khối/SQL dưới đây không như mong đợi:Tại sao dbms_sql.parse chứa khối PL/SQL sai với các biến liên kết thành công bất ngờ?
SQL> declare
2 i int;
3 begin
4 i := dbms_sql.open_cursor;
5 dbms_sql.parse(i,'begin dontexist; dbms_output.put(''a''); end;',1);
6 dbms_sql.close_cursor(i);
7 end;
8/
declare
*
FOUT in regel 1:
.ORA-06550: Regel 1, kolom 7:
PLS-00201: identifier 'DONTEXIST' must be declared.
ORA-06550: Regel 1, kolom 7:
PL/SQL: Statement ignored.
ORA-06512: in "SYS.DBMS_SQL", regel 1120
ORA-06512: in regel 5
Bởi vì tôi không có một thủ tục gọi là DONTEXIST. Câu hỏi của tôi là tại sao khối PL/SQL tiếp theo này hoàn tất thành công?
SQL> declare
2 i int;
3 begin
4 i := dbms_sql.open_cursor;
5 dbms_sql.parse(i,'begin dontexist; dbms_output.put(:a); end;',1);
6 dbms_sql.close_cursor(i);
7 end;
8/
PL/SQL-procedure is geslaagd.
Sự khác biệt là sử dụng biến liên kết thay vì hằng số, nhưng tôi muốn biết tại sao điều này tạo nên sự khác biệt.
Đây là Oracle 12.1.0.2
Có 'dbms_sql.parse (i, 'bắt đầu dbms_output.put (' 'a' '); kết thúc;', 1);' thành công không? –
Có thành công. –
Có vẻ như một lỗi đối với tôi. – APC