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

Kursor dinamis dalam prosedur tersimpan

Dari Manual MySQL

Namun ada 2 cara.

Yang pertama adalah untuk kasus di mana benar-benar hanya satu pengguna pada satu waktu yang akan menjalankan prosedur. Pernyataan persiapan dapat digunakan untuk membuat tampilan dengan SQL dinamis dan kursor dapat memilih dari tampilan bernama statis ini. Hampir tidak ada dampak kinerja. Sayangnya, tampilan ini juga dapat dilihat oleh pengguna lain (tidak ada tampilan sementara), jadi ini tidak akan berfungsi untuk banyak pengguna.

Secara analog, tabel sementara dapat dibuat dalam pernyataan persiapan dan kursor dapat memilih dari tabel sementara. Hanya sesi saat ini yang dapat melihat tabel sementara, sehingga masalah beberapa pengguna teratasi. Tetapi solusi ini dapat memiliki dampak kinerja yang signifikan karena tabel temp harus dibuat setiap kali proc berjalan.

Intinya:Kami masih membutuhkan kursor untuk dapat dibuat secara dinamis!

Berikut adalah contoh penggunaan tampilan untuk meneruskan nama tabel dan nama kolom ke kursor dari forum mysql

DELIMITER // 
DROP PROCEDURE IF EXISTS test_prepare// 

CREATE PROCEDURE test_prepare(IN tablename varchar(255), columnname varchar(50)) 
BEGIN 
DECLARE cursor_end CONDITION FOR SQLSTATE '02000'; 
DECLARE v_column_val VARCHAR(50); 
DECLARE done INT DEFAULT 0; 
DECLARE cur_table CURSOR FOR SELECT * FROM test_prepare_vw; 
DECLARE CONTINUE HANDLER FOR cursor_end SET done = 1; 

SET @query = CONCAT('CREATE VIEW test_prepare_vw as select ', columnname, ' from ', tablename); 
select @query; 
PREPARE stmt from @query; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

OPEN cur_table; 
FETCH cur_table INTO v_column_val; 
WHILE done = 0 DO 
SELECT v_column_val; 
FETCH cur_table INTO v_column_val; 
END WHILE; 
CLOSE cur_table; 

DROP VIEW test_prepare_vw; 

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 'PERBARUI PADA KUNCI DUPLICATE' tanpa kolom unik?

  2. Gunakan parameter dalam fungsi yang diteruskan ke google.setOnLoadCallback();

  3. MySQL Cara INSERT INTO [temp table] DARI [Stored Procedure]

  4. Pernyataan kasus di MySQL

  5. Sintaks SQL CREATE TABLE – Didaftarkan oleh DBMS