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
Votre solution fonctionne pour moi, trop. Soins pour le mettre dans une réponse que je puisse accepter?
Oui, il fonctionne si j'utilise
é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
Vous devez vous connecter pour publier un commentaire.
Je n'ai pas l'explication, mais cela semble fonctionner:
Ici est un violon
chr()
de contourner le problème. C'est bizarre, mais, je dois dire.J'ai trouvé quelque chose sur une fonction différente (
rawtohex
) qui se comporte différemment en sql et plsql (voir ici techonthenet.com/oracle/functions/rawtohex.php) peut-être la même chose arrive àchr()
fonctionner comme il le fait aussi implict conversions (stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/...)Mec, c'est juste whack! Oracle continue de s'ennuyer...
OriginalL'auteur A.B.Cade