Was sind die Ursachen der Numerischen Überlauf in diesem PL/SQL-Funktion?

Ich diesen Befehl ausführen können, die auf Oracle 10.2 ohne problem:

SQL> select instr(unistr('foo'), chr(4050596145)) as hazit from dual;

     HAZIT
----------
     0

Also habe ich versucht, um es zu Kapseln in einer Funktion:

CREATE OR REPLACE FUNCTION hazit(string IN VARCHAR2) RETURN INTEGER
AS
BEGIN
    RETURN instr(unistr(string), chr(4050596145));
END;
/

Function created.

Aber ich einen numerischen überlauf-Fehler, wenn ich versuche, es zu benutzen:

SQL> select hazit('foo') FROM DUAL;
select hazit('foo') FROM DUAL
       *
ERROR at line 1:
ORA-01426: numeric overflow
ORA-06512: at "DWHEELER.HAZIT", line 4

Was gibt?

Eine Vermutung , chr(4050596145) passt nicht in eine Ganzzahl mit Vorzeichen, was der Zeichensatz Ihrer Datenbank ist. Erweitern Sie den Rückgabetyp der Funktion.
seltsam, denn das funktioniert: sqlfiddle.com/#!4/c163a/1
Ich habe irgendwie das Gefühl, dass dies geschieht aufgrund chr(4050596145) denn wenn Sie ersetzen Sie es mit einem zufälligen string 'abcdefghijkl' funktioniert es Prima.
Deine Lösung funktioniert auch für mich. Pflege um es in eine Antwort, dann kann ich das akzeptieren?
Ja, es funktioniert, wenn ich chr(1234).

InformationsquelleAutor theory | 2012-10-10

Schreibe einen Kommentar