ORA-12714: ungültige nationalen Zeichensatz angegeben

Hab ich ein problem mit der oracle-Datenbank ,die ich erstellt eine gespeicherte Prozedur, und ich wollte ein array von Artikel-ids, um dieses Verfahren, um die Daten auszuwählen, die nach array mit Elementen, die die Verwendung von "in" - Klausel,die Lösung zu dieser, wie ich fand, war um eine Funktion zu erstellen, und übergeben Sie einen string-Wert mit allen Element-ids getrennt durch ein Komma ,und diese Funktion gibt eine datatble mit einer Zeile für jedes Element-id.dieser Ansatz funktioniert gut, wenn ich versuche, es in Kröte in einer select-Anweisung,aber wenn ich es in der gespeicherten Prozedur bekomme ich eine seltsame Fehlermeldung

"ORA-12714: ungültige nationalen Zeichensatz angegeben"

nach der Suche nach dem Grund dafür, dass die Fehler, die ich gefunden, dass es ein bug in dieser version von oracle laut dieser Seite und es behoben wurde in eine oracle 10.2.0.4 patch und der genaue Grund ist, deklarieren Sie einen cursor für die Funktion gibt eine Tabelle mit Daten

Da es unmöglich ist, mich um die Benutzer, die arbeiten an einer live-Produktionsumgebung zum beenden der Server anwenden, die update-patch ,ich Frage mich, wenn eine Oracle-Experte kann mir helfen zu erklären, cursor und return, cursor anstelle von der Rückkehr der Tabelle.

meine Oracle-Funktion,Dank im Voraus

create or replace

FUNCTION SplitIDs(
      v_List IN VARCHAR2)
    RETURN RtnValue_Set PIPELINED
  AS
    SWV_List VARCHAR2(2000);
    v_RtnValue Dt_RtnValue := Dt_RtnValue(NULL);
  BEGIN
    SWV_List                  := v_List;
    WHILE (instr(SWV_List,',') > 0)
    LOOP
      FOR RetRow                                               IN
      (SELECT ltrim(rtrim(SUBSTR(SWV_List,1,instr(SWV_List,',') -1))) SelectedValue
      FROM dual
      )
      LOOP
        v_RtnValue.SelectedValue := RetRow.SelectedValue;
        PIPE ROW(v_RtnValue);
      END LOOP;
      SWV_List := SUBSTR(SWV_List,instr(SWV_List,',')+LENGTH(','),LENGTH(SWV_List));
    END LOOP;
    FOR RetRow IN
    (SELECT ltrim(rtrim(SWV_List)) SelectedValue FROM dual
    )
    LOOP
      v_RtnValue.SelectedValue := RetRow.SelectedValue;
      PIPE ROW(v_RtnValue);
    END LOOP;
    RETURN;
  END;
Dies ist eine komplizierte Art und Weise zu teilen Sie eine Komma-getrennte Zeichenkette in eine Folge von Token. Überprüfen Sie heraus diese einfachere Weg zur Erreichung der gleiche: stackoverflow.com/questions/3142665/...
Vielen Dank, das klappt einwandfrei.ich bin neu in Oracle,ich habe es in T-Sql und verwendet einen Konverter-tool konvertiert, PL-Sql

InformationsquelleAutor Khaled | 2010-07-25

Schreibe einen Kommentar