Arbeits Ich habe eine PL/SQL-Funktion wie folgt aus:PL/SQL: varchar2 als IN-Parameter funktionieren nicht
FUNCTION find_by_items(items IN varchar2)
RETURN SYS_REFCURSOR
AS
o_cursor SYS_REFCURSOR;
BEGIN
open o_cursor for select a.something from my_table a where a.item in (items);
return o_cursor;
END find_by_items;
Diese immer einen leeren Cursor zurückgibt.
Wenn ich führen Sie es mit, zum Beispiel:
select find_by_items('''one'', ''two'', ''three''');
ich einen leeren Cursor.
Stecke ich die SQL-Anweisung in einer Zeichenfolge und revidieren die Funktion wie:
FUNCTION find_by_items(items IN varchar2)
RETURN SYS_REFCURSOR
AS
o_cursor SYS_REFCURSOR;
strSql varchar2(32767);
BEGIN
strSql := 'select a.something from my_table a where a.item in (' || items || ')';
open o_cursor for strSql;
return o_cursor;
END find_by_items;
Und ich rufe die Funktion genau die gleiche Art und Weise:
select find_by_items('''one'', ''two'', ''three''');
ich die Ergebnisse erhalten, erwarte ich (kein leeres Cursor)
-
Grundsätzlich, um herauszufinden, wie ich versuche, um den ersten Weg zu gehen, weil die Verwendung eines Strings bedeutet, dass es anfälliger für Laufzeitfehler ist, anstatt Fehler zu kompilieren - was in meinem speziellen Fall nicht vorzuziehen ist.
Dank
Mit IN auf varchar überprüfen, ob einer Ihrer Artikel einen Namen von '' 'eins' ',' 'zwei' ',' 'drei' '' hat. Natürlich gibt es keinen solchen Gegenstand. Sie müssen diese in eine temporäre Tabelle aufteilen und dann aus der Tabelle auswählen. –
Haben Sie versucht, Ihre Zeichenfolge in eine Liste zu konvertieren? Z.B. mit dbms_utility.comma_to_table – RaphaMex