2017-10-05 17 views
2

にオプションの変数を使用して:オラクル - 私は次のシナリオを持っている動的SQL文

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; 

「whereclause」変数は動的でどこdinamicAuxVal変数を使用することはできません句。変数が 'whereclause'で使用されていないときは、 'Bind Variable Error - ORA-01006'という例外が発生します。

私はこれがなぜ起こるのか理解していますが、周囲には何かありますか?

+0

は、変数 – OldProgrammer

+0

@OldProgrammerが、私は2つのオプションの値を持たないwhereclauseのための2つのオプションの値を表示してください。私はdinamicAuxValのような参照を持つか、 "using"文で変数への参照を持っていません。 –

答えて

0

句が初期化されていません!試してみてください:

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; 
+0

答えがありがとう、私は 'whereclause'が初期化されていないことを知っています、それは私の問題ではありません。私は 'whereclause'の変数を使用するかどうかを指定する必要があります。 –

+0

このエラー:変数のバインドを取り消します - ORA-01006はwhereclause変数を初期化することを意味します。この手順がなければ、Oracleは連結を実行できません。 "if then else"節を使用して動的な方法で初期化する必要はありません。空の文字列として初期化する必要はありませんwhere where:= ''; –

関連する問題