Oracle
 sql >> база данни >  >> RDS >> Oracle

PLS-00103 Грешка в съхранената процедура на Oracle

Скелетът на декларацията за съхранена процедура е

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

В кода, който публикувахте,

  1. Поставяте BEGIN преди декларациите на променливи
  2. Имате външен DECLARE -- бихте го използвали само ако декларирате PL/SQL блок, който не включва CREATE .
  3. Липсват ви точки и запетая след RETURN изявления.
  4. Процедура не може да върне стойност. Ако искате да върнете 1 или 0, вероятно искате функция, а не процедура. Ако имате нужда от процедура, можете да декларирате OUT параметър.
  5. Липсва ви THEN след IF

Изглежда, че искате нещо като

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;

Обърнете внимание, че като цяло е по-добре да използвате някакъв вид конвенция за именуване, за да сте сигурни, че параметрите и локалните променливи не споделят името на колона. Опитвам се да разбера дали LISTNAME е параметър или име на колона и каква е разликата между LIST_NAME и LISTNAME това обикновено ще обърка бъдещите програмисти. Лично аз използвам p_ префикс за параметри и l_ префикс за локални променливи. Бих предложил също да използвате закотвени типове-- lists_master.list_name%type ако това е, което се предава

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. Oracle BLOB към base64 CLOB

  2. Как да извика съхранена процедура в JDBC

  3. Изхвърлете данни от таблица(и) на Oracle към изрази INSERT

  4. Грешка при вмъкване на данни на SQL разработчик

  5. Генерирайте произволна дата в Oracle с DBMS_RANDOM