sql >> Database >  >> RDS >> Oracle

PLS-00103 Oracle opgeslagen procedurefout

Het skelet van een opgeslagen procedure-aangifte is

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

In de code die je hebt gepost,

  1. Je zet de BEGIN vóór de variabele declaraties
  2. Je hebt een externe DECLARE -- je zou dat alleen gebruiken als je een PL/SQL-blok declareert zonder een CREATE .
  3. Je mist puntkomma's na je RETURN verklaringen.
  4. Een procedure kan geen waarde retourneren. Als u een 1 of een 0 wilt retourneren, wilt u waarschijnlijk een functie, geen procedure. Als u een procedure nodig heeft, kunt u een OUT . declareren parameter.
  5. Je mist de THEN na de IF

Het klinkt alsof je iets wilt als

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;

Merk op dat u in het algemeen beter af bent met een soort naamgevingsconventie om ervoor te zorgen dat parameters en lokale variabelen de naam van een kolom niet delen. Proberen te achterhalen of LISTNAME is een parameter of een kolomnaam en wat het verschil is tussen LIST_NAME en LISTNAME Dit zal toekomstige programmeurs over het algemeen verwarren. Persoonlijk gebruik ik een p_ prefix voor parameters en een l_ voorvoegsel voor lokale variabelen. Ik zou ook aanraden om verankerde typen te gebruiken-- lists_master.list_name%type als dat is wat wordt doorgegeven in

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;


  1. Advies met behulp van draaitabel in Oracle

  2. ORA 00918- Kolom ambigu gedefinieerde fout

  3. Inleiding tot het ER-gegevensmodel

  4. Op datum bestellen (varchar)?