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.

19
demandé sur Gary 2012-02-10 21:09:02

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;
/
24
répondu Andrew Wolfe 2013-12-06 16:00:12

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.

6
répondu M. P. R. 2012-02-10 17:41:32

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!

enter image description here

2
répondu Dropout 2013-05-09 15:09:46

exécuter le package et le corps de package séparément avec la touche F5

1
répondu Vishy 2013-02-21 13:33:43

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.

1
répondu Error 2014-08-07 07:57:12

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.

0
répondu Jan Němec 2017-01-25 11:21:09