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

MySQL:Câu lệnh IF / THEN trong các thủ tục được lưu trữ

Bạn có một số vấn đề theo như tôi thấy:

  1. Như David đã chỉ ra, mỗi và mọi câu lệnh cần được kết thúc bằng ;
  2. Nếu bạn thực hiện SELECT , tốt hơn hãy đảm bảo rằng nó chỉ có thể chọn một giá trị bằng cách thực hiện LIMIT 1; Nếu bạn có một hàm tổng hợp như min() thì chỉ một giá trị có thể xuất hiện.
  3. Nếu bạn viết quy trình bằng CREATE PROCEDURE ... cú pháp, đừng quên đặt DELIMITER $$ trước CREATE PROCEDURE ... END $$ nội dung và một DELIMITER ; sau.
  4. Nếu bạn có nhiều câu lệnh bên trong IF THEN ... END IF , bạn nên đặt chúng bên trong BEGIN ... END; khối.
  5. Nếu bạn có giá trị trả về, chẳng hạn như đại lý ở đây, tại sao không đặt nó làm tên FUNCTION name (arg1: INTEGER) RETURNS INTEGER thay vì tên PROCEDURE name (IN arg1 INTEGER, OUT agency INTEGER) . Chức năng này linh hoạt hơn nhiều.
DELIMITER $$
CREATE PROCEDURE name(arg1 INTEGER, arg2 INTEGER, ...)
BEGIN

  SELECT SET agency = 
    COALESCE((SELECT org_agency_o_id 
            FROM orgs_agencies 
            WHERE org_agency_code = maj_agency_cat) LIMIT 1,
    (SELECT min(org_id) FROM orgs     
    WHERE org_name LIKE CONCAT('U.S.',SUBSTRING(maj_agency_cat,5)))); 

  IF agency IS NULL THEN BEGIN
    -- execute multiple queries   
    INSERT INTO orgs (org_name
                     ,org_name_length
                     ,org_type
                     ,org_sub_types) 
    VALUES (CONCAT('U.S. ',SUBSTRING(maj_agency_cat,5))
           ,LENGTH(CONCAT('U.S. ',SUBSTRING(maj_agency_cat,5)))
           ,'org','Org,GovernmentEntity,Federal,Agency');

    SET agency = LAST_INSERT_ID();
  END; END IF;
END $$

DELIMITER ;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql hiển thị danh sách các chức năng do người dùng xác định trong phpmyadmin

  2. MySQL loại bỏ các bản sao khỏi cơ sở dữ liệu lớn một cách nhanh chóng

  3. Có thể thực hiện truy vấn cho từng cơ sở dữ liệu trong cơ sở dữ liệu mysql và tính tổng hoặc kết hợp các kết quả chỉ bằng cách sử dụng môi trường lệnh mysql không?

  4. mysql chỉ tạo chế độ xem nếu nó chưa tồn tại

  5. Có ổn không khi có nhiều DAO?