Tôi không biết chính xác bạn muốn đạt được điều gì nhưng có lẽ bạn nên thử sử dụng gói DBMS_SQL
và đó là phương thức PARSE
. Điều này chỉ hoạt động với DML chỉ báo cáo. Đây là những gì Nhà phát triển SQL Oracle làm.
trình phân tích cú pháp này cũng có thể được sử dụng cho các câu lệnh DML. Đối với PL / SQL, nó sẽ cần một số điều chỉnh. Theo như tôi biết thì không ai dành đủ thời gian để tạo một trình phân tích cú pháp xác thực hoàn toàn thực sự cho DDL của Oracle.
Tại đây là một ví dụ về cách tôi sử dụng nó:
declare
l_cursor number := dbms_sql.open_cursor;
l_offset number := -1 ;
begin
begin
dbms_sql.parse( l_cursor, :st, dbms_sql.native );
exception when others then
l_offset := dbms_sql.last_error_position;
end;
dbms_sql.close_cursor( l_cursor );
:off := l_offset;
end;
Đơn giản chỉ cần thực hiện khối này. Chuyển một tham số đầu vào kiểu VARCHAR2 (Chuỗi) (tối đa 32KB) và một tham số đầu ra NUMBER.