Erreur PLS-00103 compilation de fonction définie par l'utilisateur dans Oracle
Je suis en train de créer une fonction définie par l'utilisateur dans Oracle, qui sera de retour une DATE donnée un argument texte contenant une date sous-chaîne. J'ai essayé un couple de façons de l'écriture, et tous semblent jeter le même message d'erreur:
CREATE OR REPLACE FUNCTION lm_date_convert (lm_date_in IN VARCHAR2(50))
RETURN DATE DETERMINISTIC IS
BEGIN
RETURN(TO_DATE(REGEXP_REPLACE(lm_date_in, '([[:digit:]]{2})[-/.]*([[:digit:]]{2})[-/.]*([[:digit:]]{4})','--'), 'YYYY-MM-DD'));
END;
l'erreur:
FONCTION lm_date_convert Compilé. 1/46
PLS-00103: Rencontré
le symbole "(" lorsque attend que l'un des
suivantes::= . ) , @ % de caractères par défaut de La
le symbole ":=" a remplacé "(" à
continuer.
Des idées sur ce point, et en général des UDF des conseils d'écriture (et de bonnes références) sont les bienvenus! Merci.
OriginalL'auteur Stew | 2010-08-03
Vous devez vous connecter pour publier un commentaire.
Nous ne pouvons pas restreindre le type de données lors de la spécification des paramètres des procédures stockées. C'est, il suffit d'utiliser VARCHAR2 plutôt que VARCHAR2(50).
Juste pour prouver que je suis de reproduire votre problème ...
Maintenant, pour résoudre le problème:
Déclarer un TYPE SQL pour faire respecter la taille est un peu exagéré. Nous pouvons déclarer des sous-types en PL/SQL, mais leurs tailles ne sont pas réellement appliquées dans la procédure stockée signatures. Cependant, il existe des solutions de contournement comme J'aborde dans cet autre fil.
En aparté, pourquoi êtes-vous en utilisant les Regex pour résoudre ce problème? Ou plutôt, quel problème essayez-vous de résoudre ce qui ne peut être résolu avec TO_CHAR et TO_DATE? Oracle est assez indulgent avec masques de format.
TO_DATE(SUBSTR('2010-08-03 00:00:00.0', 1, 10), 'YYYY-MM-DD')
dois-je faire à la place de l'utilisation des Regex? tous les pointeurs sur quand utiliser ou éviter les Regex, et pourquoi? merci pour l'aide!Si vraiment vous voulez un VARCHAR2(50), puis de déclarer un type de VARCHAR2(50) et d'utiliser le type.
OriginalL'auteur APC