在执行之前在Oracle中测试本机动态SQL

Ibr*_*jar 2 oracle plsql dynamic-sql

我在我的应用程序中实现了某个功能,用户可以通过按下按钮并在此处插入一些值来动态地从用户界面编写查询.

用户根本不会看到生成的SQL语句.

我想知道是否有办法可以检查语法和语法(例如,他打开了动态生成的SQL的'parantheses'('并且忘了关闭它')以确保在实际执行之前不会发生运行时编译错误声明使用EXECUTE IMMEDIATE.

Jus*_*ave 5

假设语句是DML而不是DDL,您可以使用该dbms_sql.parse过程来解析SQL语句.这将是相当不寻常的解析使用动态SQL语句dbms_sql包,然后用EXECUTE IMMEDIATE执行它,而不是使用dbms_sql.execute,但没有阻止你混合dbms_sqlexecute immediate.

只解析SQL语句的代码就是这样的

DECLARE
  l_cursor integer;
  l_sql_stmt varchar2(1000) := <<some SQL statement>>;
BEGIN
  l_cursor := dbms_sql.open_cursor;
  dbms_sql.parse( l_cursor, l_sql_stmt, dbms_sql.native );
  dbms_sql.close_cursor( l_cursor );
END;
Run Code Online (Sandbox Code Playgroud)