2016-07-13 6 views
-1

スペースで区切られたリストを含む単一のパラメータを持つファンクションをコールする必要があります。私はこのリストを変換し、変数を作成した関数内で 複数のリスト・パラメータをPL/SQLファンクションに送信

('1 2 3') 

('1,2,3') 

に私は、関数内で句クエリでこの変数 var1(nvarchar(5000))を束縛しましたが渡されていません。 1つの値1だけが渡されましたが、 '1,2,3'のような複数の値は渡されませんでした。

Ex1の:

var1 := '1' 
query syntax: col1 in (var1) -->> results are ok 

Ex2の:

var1 := '1,2,3' 
query syntax: col1 in (var1) -->> doesn't output results 

ありがとう!

答えて

1

「1,2,3」は数字ではなく文字列です。カンマを含むテキスト文字列の自動解析はありません。もしそうなら、かなり悲惨なことになるでしょう。

Comma-separated input

0

あなたはそれがTIS知るためにすべき汚れた道であり、お勧めできません。

declare 
    i varchar2(200) default '1,2,3'; 
begin 
select col1 into i from table_name where col1 in (i); 
dbms_output.put_line(i); 
end; 
/

そして、あなたはこのようにそれを行う場合は、ORA-01403、ORA-01722

のようなエラーを取得する必要があります:

あなたは、おそらくこのような何かをやって

declare 
    i varchar2(200) default '1'; 
begin 
    select col1 into i from table_name where col1 in (i); 
dbms_output.put_line(i); 
end; 
/

が エラーではありませんが、dynamic sqlを使用してリストを文字列として変数として渡す必要はありません:

declare 
    i varchar2(200) default '1,2,3'; 
begin 
execute immediate 'select col1 from table_name where col1 in ('||i||')' into i; 
dbms_output.put_line(i); 
end; 
/
0

正常に動作するはずです。

query syntax: col1 in (select xmlcast(column_value as number) from xmltable('for $i in tokenize($str,",") return $i' passing var1 as "str"). 
関連する問題