Fonction/Paquet problème PL/SQL
Je suis en train de créer un package avec quatre fonctions. Chaque fonction sera d'ajouter un ensemble de chiffres et de soustraire l'un de l'totale. J'ai eu beaucoup de difficulté à obtenir la syntaxe correcte. Les fonctions ci-dessous travailler sur leur propre, et j'ai essayer d'appeler la première fonction à la fin.
Lorsque j'essaie de créer le package, j'obtiens une erreur où sur la ligne 7, " Rencontré le symbole de la "FIN" lorsque attend l'une des opérations suivantes: fonction début pragma procédure sous-type de courant de type curseur supprimer existe avant de 0,05 secondes"
Dans le corps de package, il dit: "le nom est déjà utilisé par un objet existant". Je ne comprends pas qu'il doit être déclarée dans la spécification du package de toute façon, et de créer ou de remplacer devrait résoudre cela si l'erreur est qu'il y a déjà un paquet nommé functionbyfour.
Et enfin, lorsque je tente d'utiliser une fonction dans le paquet, il est dit " a Rencontré le symbole du "début" lorsque attend que l'un des suivants: := . ( @ % ; not null gamme de caractères par défaut Le symbole ";" a été substitué à "COMMENCER" pour continuer. ORA-06550: ligne 5, colonne 43: PLS-00103: Rencontré le symbole "DE" lorsque attend l'une des opérations suivantes: . ( * % & = - + ; < /> dans le mod reste pas rem <>! = ou ~= >= <= <> ou comme like2 like4 likec entre || multiset moi".
Je suis en utilisant ORACLE EXPRESS edition 11g et je suis nouveau sur PL/SQL(4 semaines).
Toute contribution est grandement appréciée.
CREATE OR REPLACE FUNCTION functionbyfour AS
FUNCTION functone( first number, second number) RETURN NUMBER ;
FUNCTION functtwo( first number, second number, third number) RETURN NUMBER ;
FUNCTION functthree(first number, second number, third number, fourth number) RETURN NUMBER ;
FUNCTION functfour( first number, second number, third number, fourth number,fifth number) RETURN NUMBER ;
END functionbyfour;
/
CREATE OR REPLACE PACKAGE functionbyfour AS
FUNCTION functone (first number, second number ) RETURN number AS total number;
BEGIN
total:=first + second – 1;
RETURN total;
DBMS_OUTPUT.PUT_LINE(total);
END functone;
FUNCTION functtwo (first number, second number, third number ) RETURN number AS total number;
BEGIN
total:=first + second + third – 1;
RETURN total;
DBMS_OUTPUT.PUT_LINE(total);
END functtwo;
FUNCTION functthree (first number, second number,third number, fourth number ) RETURN number AS total number;
BEGIN
total:=first + second + third + fourth – 1;
RETURN total;
DBMS_OUTPUT.PUT_LINE(total);
END functthree;
FUNCTION functfour (first number, second number, third number, fourth number, fifth number ) RETURN number AS total number;
BEGIN
total:=first + second + third + fourth + fifth – 1;
RETURN total;
DBMS_OUTPUT.PUT_LINE(total);
END functfour;
/
BEGIN
SELECT functionbyfour.functone(1,2) FROM DUAL;
END;
/
OriginalL'auteur Daniel o Keeffe | 2013-04-16
Vous devez vous connecter pour publier un commentaire.
Vous devez créer un package nommé
FunctionByFour
(CREATE OR REPLACE PACKAGE
)et puis un paquet correspondant du corps (
CREATE OR REPLACE PACKAGE BODY
). Vous aurez également besoin d'unEND
pour le corps de package (à droite maintenant, votre code se termine à la fin de la quatrième fonction)Une fois que vous avez fait cela, vous pouvez utiliser la fonction
Si vous voulez mettre la
SELECT
déclaration en PL/SQL bloc, vous avez besoin de déclarer une variable locale et de faire unSELECT INTO
pour remplir la variable locale avec le résultat de la fonction (vous pourriez tout aussi bien affecter la variable locale à la suite de l'appel de fonction sans avoir à utiliser unSELECT
).Aussi, soyez conscient que le fait de mettre un
DBMS_OUTPUT.PUT_LINE
après votreRETURN
déclaration est inutile. Ce code ne peut jamais être atteint. Si vous souhaitez imprimer le résultat de laDBMS_OUTPUT
tampon, qui aurait besoin de venir avant laRETURN
.OriginalL'auteur Justin Cave
La ligne
devrait être
La ligne
devrait être
Le second mot est un mot-clé et vous ne pouvez pas l'utiliser comme un nom de paramètre
Vous avez besoin d'un
Après la FIN de votre functfour à la fin le corps de package
Votre dbms_outputs ne sera jamais exécutée comme ils sont, après le retour
Vous pourriez faire tout cela en une seule fonction
Quelle chose étrange envie de le faire? 🙂
Ouais quand j'ai dit "peut pas" j'aurais dit "ne devrait pas" si vous avez plsql avertissements sous tension et vérifier les erreurs de l'utilisateur, vous obtiendrez l'avertissement PLW-06010: le mot-clé "DEUXIÈME", utilisé comme un nom défini
OriginalL'auteur Dave
Vous êtes confus au sujet autonome des programmes et des packages.
CRÉER FONCTION peut uniquement être utilisé pour créer une application autonome functiion. Ce que vous avez là devrait être:
Un paquet se compose de deux parties, une spécification et d'un corps. La spécification est la face publique de l'API, le corps est la mise en œuvre. Ce que vous avez comme le paquet (spec) est le corps de package. Changer ainsi que le second morceau de code pour démarrer
et au moins vous aurez votre programme structuré correctement.
L'Oracle PL/SQL de la documentation est en ligne, comnprehensive et gratuit. Je vous invite à le lire. En savoir plus.
OriginalL'auteur APC