sql >> Databáze >  >> RDS >> Oracle

PLS-00103 Chyba uložené procedury Oracle

Kostra deklarace uložené procedury je

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

V kódu, který jste zveřejnili,

  1. Zadáte BEGIN před deklaracemi proměnných
  2. Máte nadbytečné DECLARE -- to byste použili pouze v případě, že deklarujete blok PL/SQL, který nezahrnuje CREATE .
  3. Za RETURN vám chybí středníky prohlášení.
  4. Procedura nemůže vrátit hodnotu. Pokud chcete vrátit buď 1 nebo 0, pravděpodobně chcete funkci, ne proceduru. Pokud potřebujete proceduru, můžete deklarovat OUT parametr.
  5. Chybí vám THEN za IF

Zní to, jako byste chtěli něco jako

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;

Všimněte si, že obecně je lepší použít nějakou konvenci pojmenování, abyste zajistili, že parametry a lokální proměnné nebudou sdílet název sloupce. Snažím se zjistit, zda LISTNAME je parametr nebo název sloupce a jaký je rozdíl mezi LIST_NAME a LISTNAME to bude obecně matoucí budoucí programátory. Osobně používám p_ prefix pro parametry a l_ prefix pro lokální proměnné. Také bych doporučil používat ukotvené typy -- lists_master.list_name%type pokud je to to, co se předává

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. Jak získat aktuální verzi systému správy databází MySQL (DBMS)?

  2. MaxListenersExceededWarning:Bylo zjištěno možné únik paměti EventEmitter. Přidáno 11 posluchačů zpráv. Ke zvýšení limitu použijte emitter.setMaxListeners().

  3. Připojte se k databázi Oracle ve VB

  4. jak dotazovat (vyhledat) sql na Amazon Athena, který má hodnotu JSON?