créer le paquet oracle rencontré PLS-00103: rencontré le symbole " créer"
j'écris un paquet oracle en utilisant Oracle sql developer, j'ai eu cette erreur de compilation:
Error (7,1): PLS-00103: rencontré le symbole "CREATE" .
create or replace
PACKAGE TestPackage AS
FUNCTION beforePopulate RETURN BOOLEAN;
FUNCTION afterPopulate RETURN BOOLEAN;
END TestPackage;
CREATE OR REPLACE PACKAGE BODY TestPackage AS
FUNCTION beforePopulate RETURN BOOLEAN AS
BEGIN
DELETE FROM TEST_1;
INSERT INTO TEST_1
SELECT * FROM TEST WHERE VALUE=300;
COMMIT;
RETURN TRUE;
EXCEPTION
WHEN OTHERS THEN
RETURN FALSE;
END;
FUNCTION afterPopulate RETURN BOOLEAN AS
BEGIN
UPDATE TEST SET RESULT="completed" WHERE VALUE=300;
COMMIT;
RETURN TRUE;
EXCEPTION
WHEN OTHERS RETURN FALSE;
END;
END;
END TestPackage;
Si j'ajoute un /
à la ligne 6, l'erreur devient:
Erreur(6,1): PLS-00103: Rencontré le symbole "/"
je fatigue un vide de mise en œuvre comme ceci:
create or replace
package package1 as
END PACKAGE1;
CREATE OR REPLACE
package body package1 as
end package1;
j'ai eu le même rpr.
6 réponses
quand vous avez BEGIN, END, etc Vous êtes en PL / SQL, pas en SQL.
un bloc PL/SQL doit être terminé par une simple barre oblique ("forward") au tout début de la ligne. Cela indique à Oracle que vous avez terminé avec votre bloc PL/SQL, donc il compile ce bloc de texte.
requête SQL terminée par un point-virgule:
update orders set status = 'COMPLETE' where order_id = 55255;
PL/SQL bloc - commandes séparés par point-virgule, le bloc est terminé par une barre oblique vers l'avant:
create or replace procedure mark_order_complete (completed_order_id in number)
is
begin
update orders set status = 'COMPLETE' where order_id = :completed_order_id;
end mark_order_complete;
/
cela a fonctionné pour moi en utilisant Oracle SQL Developer:
create or replace PACKAGE TestPackage AS
FUNCTION beforePopulate
RETURN BOOLEAN;
FUNCTION afterPopulate
RETURN BOOLEAN;
END TestPackage;
/
CREATE OR REPLACE PACKAGE BODY TestPackage AS
FUNCTION beforePopulate
RETURN BOOLEAN AS
BEGIN
DELETE FROM TESTE;
INSERT INTO TESTE
SELECT 1,1,1 FROM DUAL;
COMMIT;
RETURN TRUE;
EXCEPTION
WHEN OTHERS THEN
RETURN FALSE;
END;
FUNCTION afterPopulate
RETURN BOOLEAN AS
BEGIN
UPDATE TESTE SET TESTE='OK' WHERE TESTE='';
COMMIT;
RETURN TRUE;
EXCEPTION
WHEN OTHERS THEN RETURN FALSE;
END;
END TestPackage;
/
Je ne pouvais pas le faire fonctionner jusqu'à ce que je crée réellement les tables et les colonnes qu'il utiliserait.
après quelques heures de frustration, j'ai réussi à faire fonctionner ce truc. J'ai eu l' exact problème comme vous l'avez fait.
la solution pour moi était de l'exécuter comme un script - pas dans le code du paquet. Les slashes Forward fonctionnent correctement dans la feuille de travail SQL. Je joins la différence, j'espère qu'elle vous aidera!
exécuter le package et le corps de package séparément avec la touche F5
j'ai eu le même problème. Je crée le paquet en utilisant le menu principal à gauche et je mets la déclaration du paquet et le corps à l'intérieur du même .fichier sql. Problème résolu Quand je copie tout le code et le coller dans une nouvelle feuille de travail et mettre " / " après end package_name (à la fois après la déclaration du paquet et le corps) et ensuite execute worksheet as script.
j'ai eu ce problème (erreur(6,1): PLS-00103: J'ai rencontré le symbole "/" ) quand j'ai Coppé tout le code de paquet db (à la fois les en-têtes de procédures et les implémentations) dans sqldeveloper en user/packages/MY_PACKAGE_NAME/MY_PACKAGE_BODY au lieu de copier les en-têtes (sans '/' à la fin) dans user/packages/MY_PACKAGE_NAME et implémentation (sans en-têtes au sommet et sans '/' à la fin) dans user/packages/my_package_name/My_package_body.