Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

PLS-00103 lỗi thủ tục lưu trữ Oracle

Khung của một khai báo thủ tục được lưu trữ là

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

Trong mã bạn đã đăng,

  1. Bạn đặt BEGIN trước khi khai báo biến
  2. Bạn có DECLARE không liên quan - bạn sẽ chỉ sử dụng nó nếu bạn đang khai báo một khối PL / SQL không liên quan đến CREATE .
  3. Bạn thiếu dấu chấm phẩy sau RETURN của mình tuyên bố.
  4. Một thủ tục không thể trả về một giá trị. Nếu bạn muốn trả về 1 hoặc 0, bạn có thể muốn một hàm chứ không phải một thủ tục. Nếu bạn cần một thủ tục, bạn có thể khai báo một OUT tham số.
  5. Bạn đang thiếu THEN sau IF

Có vẻ như bạn muốn một cái gì đó giống như

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;

Lưu ý rằng như một vấn đề chung, bạn thường nên sử dụng một số loại quy ước đặt tên để đảm bảo rằng các tham số và biến cục bộ không dùng chung tên của một cột. Đang cố gắng tìm ra liệu LISTNAME là một tham số hoặc một tên cột và sự khác biệt giữa LIST_NAMELISTNAME nói chung sẽ gây nhầm lẫn cho các lập trình viên trong tương lai. Cá nhân tôi sử dụng p_ tiền tố cho các tham số và một l_ tiền tố cho các biến cục bộ. Tôi cũng sẽ đề xuất sử dụng các loại cố định-- lists_master.list_name%type nếu đó là những gì đang được chuyển vào

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. Gọi các thủ tục được lưu trữ của Oracle với MyBatis

  2. cách chọn giá trị từ kết quả truy vấn phụ

  3. Kích hoạt Oracle sau khi chèn hoặc xóa

  4. Các kết hợp từ một bảng, được nhóm theo giá trị cột

  5. Tại sao hàm pi () không hoạt động trong Oracle khi sử dụng trình điều khiển JDBC của nó?