我想检查查询是否具有指定名称的绑定(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
关于oracle - 在查询中查找绑定(bind)变量的安全方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73661807/