Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL:Pernyataan IF / THEN dalam prosedur tersimpan

Anda punya beberapa masalah sejauh yang saya bisa lihat:

  1. Seperti yang ditunjukkan David, setiap pernyataan harus diakhiri dengan ;
  2. Jika Anda melakukan SELECT , lebih baik pastikan hanya dapat memilih satu nilai dengan melakukan LIMIT 1; Jika Anda memiliki fungsi agregat seperti min() maka hanya satu nilai yang bisa keluar.
  3. Jika Anda menulis prosedur menggunakan CREATE PROCEDURE ... sintaks, jangan lupa untuk mengatur DELIMITER $$ sebelum CREATE PROCEDURE ... END $$ badan dan DELIMITER ; setelah.
  4. Jika Anda memiliki beberapa pernyataan di dalam IF THEN ... END IF blok, ada baiknya untuk memasukkannya ke dalam BEGIN ... END; blokir.
  5. Jika Anda memiliki nilai pengembalian, seperti agensi di sini, mengapa tidak menjadikannya FUNCTION name (arg1: INTEGER) RETURNS INTEGER sebagai ganti PROCEDURE name (IN arg1 INTEGER, OUT agency INTEGER) . Fungsinya jauh lebih serbaguna.
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. Apakah Rails mendukung tipe data json mysql?

  2. pernyataan yang disiapkan mysqli num_rows mengembalikan 0 sementara kueri mengembalikan lebih besar dari 0

  3. Pesanan MySql berdasarkan tanggal (varchar) dalam Mmm-dd-yyyy

  4. Cara menggabungkan beberapa nilai dari beberapa tabel relasi dalam satu kueri mysql

  5. Ubah nilai datetime menjadi string