我在我的应用程序中实现了一个特定的功能,用户可以通过按下按钮并在各处插入一些值来从用户界面动态地编写查询。
用户根本看不到生成的SQL语句。
我想知道是否有一种方法可以检查动态生成的 SQL 的句法和文法(例如,他打开了一个括号“(”并忘记关闭它),以确保没有< strong>运行时编译错误会在使用 EXECUTE IMMEDIATE 实际执行语句之前发生。
最佳答案
您可以使用 dbms_sql.parse
procedure假设语句是 DML 而不是 DDL 来解析 SQL 语句。使用 dbms_sql
包解析动态 SQL 语句然后使用 EXECUTE IMMEDIATE
执行它而不是使用 dbms_sql.execute
是相当不寻常的但没有什么能阻止您混合使用 dbms_sql
和 execute 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;
关于oracle - 执行前在 Oracle 中测试 native 动态 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24848751/