oracle - 执行前在 Oracle 中测试 native 动态 SQL

标签 oracle plsql dynamic-sql

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

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

我想知道是否有一种方法可以检查动态生成的 SQL 的句法和文法(例如,他打开了一个括号“(”并忘记关闭它),以确保没有< strong>运行时编译错误会在使用 EXECUTE IMMEDIATE 实际执行语句之前发生。

最佳答案

您可以使用 dbms_sql.parse procedure假设语句是 DML 而不是 DDL 来解析 SQL 语句。使用 dbms_sql 包解析动态 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;

关于oracle - 执行前在 Oracle 中测试 native 动态 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24848751/

相关文章:

oracle - 在 PL/SQL 中,我可以通过存储过程参数传递游标 FROM 子句的表模式吗?

mysql - 如何获得 2 列的不同计数值?

oracle - 如何从不同的表和 View 中删除/插入

sql - 将动态 SQL 的结果放入 sql-server 的变量中

oracle - 如何通过立即执行传播全局定义的异常?

sql - 如何从 Postgres 中的动态 SQL 获取结果?

sql - 这个查询可以优化吗?

database - 什么是 RAC 感知应用程序?

sql - 测试函数的多个值

database - 使用带有联合和 CLOB 字段的选择时出现 ORA-00932 错误