sql >> Database teknologi >  >> RDS >> Oracle

PLS-00103 Oracle-fejl i lagret procedure

Skelettet af en lagret procedureerklæring er

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

I den kode, du sendte,

  1. Du sætter BEGIN før variabeldeklarationerne
  2. Du har en uvedkommende DECLARE -- du ville kun bruge det, hvis du erklærer en PL/SQL-blok, der ikke involverer en CREATE .
  3. Du mangler semikolon efter din RETURN udsagn.
  4. En procedure kan ikke returnere en værdi. Hvis du vil returnere enten et 1 eller et 0, vil du sandsynligvis have en funktion, ikke en procedure. Hvis du har brug for en procedure, kan du erklære en OUT parameter.
  5. Du mangler THEN efter IF

Det lyder som om du vil have noget lignende

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;

Bemærk, at du generelt er bedre stillet ved at bruge en form for navngivningskonvention for at sikre, at parametre og lokale variabler ikke deler navnet på en kolonne. Forsøger at finde ud af, om LISTNAME er en parameter eller et kolonnenavn, og hvad forskellen mellem LIST_NAME og LISTNAME det vil generelt forvirre fremtidige programmører. Personligt bruger jeg en p_ præfiks for parametre og en l_ præfiks for lokale variabler. Jeg vil også foreslå at bruge forankrede typer-- lists_master.list_name%type hvis det er det, der sendes ind

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. Opret en SQL Server-database med SQLOPS

  2. literal matcher ikke formatstrengfejl ved opdatering af sql-tabel

  3. Undgå duplikerede værdier i databasen - mysql

  4. Læs tabulatorsepareret tekstfil ind i MySQL-tabel med PHP