Oracle - 在动态SQL语句上使用可选变量

时间:2017-10-05 16:23:56

标签: sql oracle

我有以下情况:

declare
  dinamicsql    varchar2(500);
  whereclause   varchar2(500);
  returnval     numeric;
  dinamicAuxVal numeric;
begin
  dinamicAuxVal := 2;
  dinamicsql    := 'select dummy from dual ' || whereclause;
  execute immediate dinamicsql
   into returnval
   using dinamicAuxVal;

  dbms_output.put_line(returnval);
end;

' where clause'变量是一个动态的where子句,可能不使用dinamicAuxVal变量。当变量未用于' whereclause'我得到例外'绑定变量错误 - ORA-01006'。

我理解为什么会发生这种情况,但有什么办法吗?

1 个答案:

答案 0 :(得分:0)

whereclause未初始化!试试:

whereclause := <whatever you want>;
dinamicsql    := 'select dummy from dual ' || whereclause;

另请参阅:https://www.techonthenet.com/oracle/errors/ora01006.php

使用if then子句以dinamically方式初始化变量。例如:

whereclause := '';
IF <you need a where clause> THEN
    whereclause := 'where xyz ... ';
END IF;