2016-11-20 12 views
1

以下のクエリを実行している場合、4つの正しいレコードが表示されます。Oracle:ストアドプロシージャを使用して動的文字列をクエリに渡す

select SUBSCRIBER_NUM, SUBSCRIBER_STATUS, P_ID 
from C_S_FORWARD_INFO 
where SUBSCRIBER_NUM IN ('0', '07', '070', '0705', '07052', '070526', '0705262', '07052620') and 
     SCP_VER = 1 

しかし、私が以下で実行すると、私には0レコードが与えられます。実際には、クエリの 'IN'部分に値を動的に渡す必要があります。

私は(VAR_CALLING_NUM = 07052620)以下試してみました:

while var1<=len LOOP 
temp1 := SUBSTR(VAR_CALLING_NUM, 1, var1); 
temp1 := concat('''',temp1); 
temp1 := concat(temp1,''''); 
temp6 := temp6 || temp1 || ',' ; 
var1:=var1+1; 
END LOOP; 
temp6 := SUBSTR(temp6, 1,length(temp6)-1); 

select SUBSCRIBER_NUM, SUBSCRIBER_STATUS, P_ID from C_S_FORWARD_INFO where SUBSCRIBER_NUM IN (temp6) and SCP_VER = 1 order by length(subscriber_num) desc; 

これは私に0レコードをgivignされるのはなぜ。私は間違ったことをしていますか?SUBSCRIBER_NUM IN (temp6)

+0

ループ・コードがあるため、PL/SQLです。 PL/SQLでは、選択するだけでなく、変数を選択することもできます。 PL/SQLで何をしたいのですか? – Kacper

答えて

2

"'0', '07', . . ."のような文字列があります。これは単一の文字列です。 inでは複数の値として解釈されません。

動的SQLを使用してこれをリストにする必要があります。これには、SQLを構築してからexecute immediateを使用する必要があります。

+0

ご意見ありがとうございます。 Actully私はストアドプロシージャを呼び出すJavaコードを持っています。今はストアドプロシージャがとても大きいので、ここでその一部を示しています。どうやったらいいか教えてくれますか? – VJS

+0

変数に別々の値を格納することは可能ですか? SUBSCRIBER_NUM IN(a1、a2、a3、a4、a5、a6、a7)のように、a1 = '07 '、a2 =' 070 '、a3 =' 0705 '、a4 =' 07052 ' a7、a8)とSCP_VER = 1 order by length(subscriber_num)desc。 – VJS

+0

あなたの助けが要求されます – VJS

関連する問題