ORA-06502: - Numerische oder Wert-Fehler, die auf sehr einfache string-Funktion, was bedeutet das?

Hier ist der code... das ist nicht der vollständige code. Ich getrimmt Sie es nach unten, wo der erste Fehler aufgetreten ist:

 FUNCTION get (  
    p_sql_o                         OUT VARCHAR2
  ) RETURN VARCHAR2 AS
  str_sql           VARCHAR2(4000);
  BEGIN
    str_sql := ' SELECT * FROM ( SELECT A.*, ROWNUM RNUM FROM ( ' ||
               ' SELECT item_code, ' ||
               ' item_desc, ' ||
               ' monitor, ' ||
               ' measured, ' ||
               ' inventory, ' ||
               ' (measured - inventory) adj_amount, ' ||
               ' (inventory_cost * measured) measured_cost, ' ||
               'inventory';
    RETURN str_sql;
  EXCEPTION
    WHEN OTHERS THEN
    RETURN NULL;
  END get;

Offensichtlich, das SQL ist unvollständig, aber ich es nicht verwende. Ich bin einfach der Rückgabe der SQL-string, aber ich bekomme immer noch eine Fehlermeldung:

ORA-06502: PL/SQL: numerische oder Wert Fehler: character string buffer too small
ORA-06512: in Zeile 6

Dies ist unverständlich. Hat jemand eine Ahnung, warum dies der Fall sein würde?

Sind Sie immer der Fehler innerhalb der get Funktion? Oder sind Sie immer die Fehler bei dem Anrufer auf der Linie, wo die get Funktion aufgerufen wird? Wenn letzteres, würde das bedeuten, dass der Anrufer noch nicht zugeteilt, eine genügend große Zeichenkette für die Funktion, um die Daten zurückzugeben. Außerdem ist es sehr seltsam, dass Sie eine OUT parameter in der Funktion, die, vom Namen, scheint verwendet werden, um wieder eine SQL-Anweisung an den Aufrufer zusätzlich zu den RETURN - Anweisung. Die OUT parameter ist hier völlig überflüssig.
Was ist der Wert von p_sql_o ?
Ich kann laufen diese ohne Fehler... also ja, etwas seltsam. Sie sind nirgendwo in der Nähe der 4k-Grenze, so dass selbst wenn Sie ausgeführt wurden, diese in eine UTF-16-DB die Anzahl der bytes, die würde nicht erreichen 4k. Ich vermute, Sie versuchen, die Ausgabe in eine variable, die zu klein sind. Wie nennst du das?
Wenn ich die Beseitigung der letzten "Inventur" - Zeile in den string, es gibt keinen Fehler. Fehler tritt auf, bevor ich sogar auf die RÜCKKEHR.

InformationsquelleAutor jlrolin | 2013-02-27

Schreibe einen Kommentar