Oracle
 sql >> Base de données >  >> RDS >> Oracle

PLS-00103 Erreur de procédure stockée Oracle

Le squelette d'une déclaration de procédure stockée est

CREATE OR REPLACE PROCEDURE procedure_name( <<parameters>> ) 
AS
  <<variable declarations>>
BEGIN
  <<code>>
END procedure_name;

Dans le code que vous avez posté,

  1. Vous mettez le BEGIN avant les déclarations de variables
  2. Vous avez un DECLARE étranger - vous ne l'utiliserez que si vous déclarez un bloc PL/SQL qui n'implique pas de CREATE .
  3. Il manque des points-virgules après votre RETURN déclarations.
  4. Une procédure ne peut pas renvoyer de valeur. Si vous souhaitez renvoyer un 1 ou un 0, vous voulez probablement une fonction, pas une procédure. Si vous avez besoin d'une procédure, vous pouvez déclarer un OUT paramètre.
  5. Il vous manque le THEN après le IF

On dirait que vous voulez quelque chose comme

CREATE OR REPLACE FUNCTION LIST_ACTIONS_CHECK_ADD 
(
  LISTNAME IN VARCHAR2  
) 
  RETURN NUMBER
AS 
 CNT NUMBER;
BEGIN
 SELECT COUNT(LIST_NAME) 
   INTO CNT 
   FROM LISTS_MASTER 
  WHERE LIST_NAME = LISTNAME;
 IF (CNT > 0)
 THEN
   RETURN 1;
 ELSE
   RETURN 0;
  END IF;
END LIST_ACTIONS_CHECK_ADD;

Notez qu'en règle générale, il est généralement préférable d'utiliser une sorte de convention de dénomination pour garantir que les paramètres et les variables locales ne partagent pas le nom d'une colonne. Essayer de déterminer si LISTNAME est un paramètre ou un nom de colonne et quelle est la différence entre LIST_NAME et LISTNAME Cela confondra généralement les futurs programmeurs. Personnellement, j'utilise un p_ préfixe pour les paramètres et un l_ préfixe pour les variables locales. Je suggérerais également d'utiliser des types ancrés-- lists_master.list_name%type si c'est ce qui est transmis

CREATE OR REPLACE FUNCTION LIST_ACTIONS_CHECK_ADD 
(
  P_LIST_NAME IN lists_master.list_name%type
) 
  RETURN NUMBER
AS 
 L_CNT NUMBER;
BEGIN
 SELECT COUNT(LIST_NAME) 
   INTO L_CNT 
   FROM LISTS_MASTER 
  WHERE LIST_NAME = P_LIST_NAME;
 IF (L_CNT > 0)
 THEN
   RETURN 1;
 ELSE
   RETURN 0;
  END IF;
END LIST_ACTIONS_CHECK_ADD;