2016-07-13 5 views
-1

Ich muss eine Funktion mit einem einzelnen Parameter aufrufen, die eine durch ein Leerzeichen begrenzte Liste enthält.Mehrere Listenparameter an eine PL/SQL-Funktion senden

('1 2 3') 

Innerhalb der Funktion ich eine Variable erstellt haben, die diese Liste

('1,2,3') 

Ich habe diese Abfrage Variable var1(nvarchar(5000)) in Paragraf innerhalb Funktion gebunden zu konvertiert wird, aber nicht weitergegeben. Wurde nur ein Wert 1 übergeben, aber mehrere Werte wie '1,2,3' wurden nicht übergeben.

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 

Dank!

Antwort

1

'1,2,3' ist ein String, kein Satz von Zahlen - es gibt kein automatisches Parsen von Textstrings, die Kommas enthalten. Es wäre ziemlich katastrophal, wenn es das tun würde.

Comma-separated input

0

Sie sollten wissen, dass tis ist schmutzig Weg und nicht ratsam.

Sie wahrscheinlich so etwas wie dies zu tun:

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; 
/

Und Sie sollten Fehler wie ORA-01403, ORA-01722

bekommen Wenn Sie es wie folgt tun:

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

Es ist kein Fehler , aber Sie sollten Liste als String nicht als Variable wie folgt mit dynamischen sql übergeben:

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

Es sollte funktionieren.

query syntax: col1 in (select xmlcast(column_value as number) from xmltable('for $i in tokenize($str,",") return $i' passing var1 as "str"). 
Verwandte Themen