Oracle
 sql >> Baza danych >  >> RDS >> Oracle

PLS-00103 Błąd procedury składowanej Oracle

Szkielet deklaracji procedury składowanej to

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

W opublikowanym przez Ciebie kodzie

  1. Wstawiasz BEGIN przed deklaracjami zmiennych
  2. Masz nieistotne DECLARE -- użyjesz tego tylko wtedy, gdy deklarujesz blok PL/SQL, który nie obejmuje CREATE .
  3. Brakuje średników po RETURN oświadczenia.
  4. Procedura nie może zwrócić wartości. Jeśli chcesz zwrócić 1 lub 0, prawdopodobnie potrzebujesz funkcji, a nie procedury. Jeśli potrzebujesz procedury, możesz zadeklarować OUT parametr.
  5. Brakuje elementu THEN po IF

Wygląda na to, że chcesz czegoś takiego

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;

Zwróć uwagę, że ogólnie rzecz biorąc, lepiej jest użyć pewnego rodzaju konwencji nazewnictwa, aby zapewnić, że parametry i zmienne lokalne nie będą współdzielić nazwy kolumny. Próbuję dowiedzieć się, czy LISTNAME to parametr lub nazwa kolumny i jaka jest różnica między LIST_NAME i LISTNAME To generalnie zdezorientuje przyszłych programistów. Osobiście używam p_ przedrostek dla parametrów i l_ prefiks dla zmiennych lokalnych. Sugerowałbym również użycie typów zakotwiczonych -- lists_master.list_name%type jeśli to właśnie jest przekazywane

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać klauzuli zbiorczego zbierania z instrukcją SELECT INTO w bazie danych Oracle

  2. oratop

  3. Jak mogę zablokować pojedynczy wiersz w Oracle SQL?

  4. Wyświetlanie kolumny CLOB z 4000+ znakami

  5. Przejście z LINQpad do właściwego projektu Visual Studio?