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:

  1. select * from table(strtokenizer('a,b,c',',')) gibt. "ORA-30732: Tabelle enthält keine vom Benutzer sichtbaren Spalten"
  2. 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.
War es hilfreich?

Lösung

, um die Funktion compiliert Angenommen, versuchen Sie:

SELECT * 
  FROM TABLE(strtokenizer('a,b,c',','));

Referenz:

scroll top