sql >> Databasteknik >  >> RDS >> Oracle

PLS-00103 Oracles lagrade procedurfel

Skelettet i en lagrad procedurdeklaration är

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

I koden du postade,

  1. Du anger BEGIN före variabeldeklarationerna
  2. Du har en främmande DECLARE -- du skulle bara använda det om du deklarerar ett PL/SQL-block som inte involverar en CREATE .
  3. Du saknar semikolon efter din RETURN uttalanden.
  4. En procedur kan inte returnera ett värde. Om du vill returnera antingen en 1 eller en 0, vill du förmodligen ha en funktion, inte en procedur. Om du behöver en procedur kan du deklarera en OUT parameter.
  5. Du saknar THEN efter IF

Det låter som att du vill ha något liknande

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;

Observera att du generellt sett är bättre att använda någon form av namnkonvention för att säkerställa att parametrar och lokala variabler inte delar namnet på en kolumn. Försöker ta reda på om LISTNAME är en parameter eller ett kolumnnamn och vad är skillnaden mellan LIST_NAME och LISTNAME Det kommer i allmänhet att förvirra framtida programmerare. Personligen använder jag en p_ prefix för parametrar och en l_ prefix för lokala variabler. Jag skulle också rekommendera att använda förankrade typer-- lists_master.list_name%type om det är det som skickas 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. Hur kan jag göra den här dynamiska uppdateringen i Oracle?

  2. Funktion i PostgreSQL för att infoga från en tabell till en annan?

  3. Alternativ till sql-server TOP i oracle

  4. Klona en post och använd sedan dess autoinkrement-id för ytterligare operationer