oracle - 在查询中查找绑定(bind)变量的安全方法是什么

标签 oracle plsql

我想检查查询是否具有指定名称的绑定(bind)变量。因为我有一个处理查询的过程。这些查询可以具有绑定(bind)变量。根据绑定(bind)变量名称,我希望绑定(bind)不同的值。我可以使用如下所示的 INSTR 方法:

IF INSTR(mySELECT, ':n1') > 0 THEN 
    DBMS_SQL.BIND_VARIABLE (myCursorId, 'n1', n1);
END IF;
IF INSTR(mySELECT ,':n2') > 0 THEN
    DBMS_SQL.BIND_VARIABLE (myCursorId, 'n2', n2);
END IF;

但我认为这不是最好的方法。有人可以给我一个更好的吗?

最佳答案

I want to check if a query has bind variables.

如果您只想检查查询是否有绑定(bind)变量,则执行它并捕获异常(如果有未绑定(bind)的变量):

DECLARE
  NOT_ALL_VARIABLES_BOUND EXCEPTION;
  PRAGMA EXCEPTION_INIT(NOT_ALL_VARIABLES_BOUND, -1008);
BEGIN
  EXECUTE IMMEDIATE 'SELECT :n1 FROM DUAL';
  DBMS_OUTPUT.PUT_LINE('No bind variables');
EXCEPTION
  WHEN NOT_ALL_VARIABLES_BOUND THEN
    DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/

输出:

ORA-01008: not all variables bound

DECLARE
  NOT_ALL_VARIABLES_BOUND EXCEPTION;
  PRAGMA EXCEPTION_INIT(NOT_ALL_VARIABLES_BOUND, -1008);
BEGIN
  EXECUTE IMMEDIATE 'SELECT '':n1'' FROM DUAL';
  DBMS_OUTPUT.PUT_LINE('No bind variables');
EXCEPTION
  WHEN NOT_ALL_VARIABLES_BOUND THEN
    DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/

输出:

No bind variables

fiddle

关于oracle - 在查询中查找绑定(bind)变量的安全方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73661807/

相关文章:

java - 通过 JDBC 运行 PL/SQL 和 T-SQL

sql - Oracle:在更新一个字段时复制行

sql - 在 TOP 上使用特定值排序

java - 有没有办法在java项目中全局设置jdbc查询超时

oracle - 如何将结果导出到 Toad for Data Analyst 中的 Excel 的不同选项卡中?

oracle - 如何在oracle中的同一数据库上创建完整模式的副本

datetime - SQL 中的正确日期范围

sql - 连接具有相同连接类型的两个查询

sql-server - Oracle 到 MSSQL 迁移错误 'The table xxx doesnot exist in target'

sql - PL/SQL 甲骨文 : Trigger updates on delete