Quelles sont les Causes du Dépassement Numérique dans cette Fonction PL/SQL?

Je peux exécuter cette commande sur Oracle 10.2 sans problème:

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

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

J'ai donc essayé de l'encapsuler dans une fonction:

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

Function created.

Mais je reçois un dépassement numérique d'erreur lorsque j'essaie de l'utiliser:

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

Ce qui donne?

Une supposition , chr(4050596145) ne correspondent pas à un nombre entier signé quel que soit le jeu de caractères de votre base de données. Élargir le type de retour de la fonction.
étrange, car cela fonctionne: sqlfiddle.com/#!4/c163a/1
J'ai un peu l'impression que ce qui se passe en raison de chr(4050596145) parce que si vous la remplacez par une chaîne aléatoire 'abcdefghijkl' il fonctionne très bien.
Votre solution fonctionne pour moi, trop. Soins pour le mettre dans une réponse que je puisse accepter?
Oui, il fonctionne si j'utilise chr(1234).

OriginalL'auteur theory | 2012-10-10