wie ein dynamisches Ergebnismenge in Oracle Funktion zurückzukehren
Frage
fand ich eine Zeichenfolge tokenizer Abfrage im Netz und in die unten Funktion verpackt, die die dynamische Gruppe von Token zurück. Die Funktion erfolgreich kompiliert, aber irgendwie bekomme ich die Fehlermeldung „ORA-00933: SQL-Befehl nicht richtig beendet“. Kann jemand mir helfen, diesen debuggen bitte? Danke.
CREATE OR REPLACE TYPE KEY_VALUE_TYPE is object (k varchar2(4000), v varchar2(4000));
CREATE OR REPLACE TYPE KEY_VALUE_TABLE is table of key_value_type;
CREATE OR REPLACE FUNCTION StrTokenizer
(string IN VARCHAR2, delimiter IN VARCHAR2)
RETURN key_value_table AS
v_ret key_value_table;
BEGIN
SELECT
CAST(
multiset(
SELECT
LEVEL k,
SUBSTR(STRING_TO_TOKENIZE,
DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1),
INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL)
- DECODE( LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1)) v
FROM
(
SELECT
':string'||':delimiter' AS STRING_TO_TOKENIZE , ':delimiter' AS DELIMITER
FROM
DUAL
)
CONNECT BY INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL)>0
ORDER BY level ASC)
As key_value_table)
INTO
v_ret
FROM dual;
return v_ret;
END;
select * from strtokenizer('a,b,c',',')
ORA-00933: SQL command not properly ended
Edit:
-
select * from table(strtokenizer('a,b,c',','))
gibt. "ORA-30732: Tabelle enthält keine vom Benutzer sichtbaren Spalten" -
ORA-30732
ist weg, wenn ich als Funktion Eigentümer angemeldet, aber die Funktion nicht ersetzen kann ‚: String‘ || ‚: Trennzeichen‘ mit den übergebenen in Werten. Wie kann ich das korrigieren? Und wie kann ich eine Funktion ausführen, wenn ich nicht auf als Eigentümer angemeldet bin? Danke.
Lösung
, um die Funktion compiliert Angenommen, versuchen Sie:
SELECT *
FROM TABLE(strtokenizer('a,b,c',','));
Referenz:
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow