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

Looping Over Hasil Set di MySQL

Sesuatu seperti ini akan berhasil (Namun, baca setelah cuplikan untuk info lebih lanjut)

CREATE PROCEDURE GetFilteredData()
BEGIN
  DECLARE bDone INT;

  DECLARE var1 CHAR(16);    -- or approriate type
  DECLARE Var2 INT;
  DECLARE Var3 VARCHAR(50);

  DECLARE curs CURSOR FOR  SELECT something FROM somewhere WHERE some stuff;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET bDone = 1;

  DROP TEMPORARY TABLE IF EXISTS tblResults;
  CREATE TEMPORARY TABLE IF NOT EXISTS tblResults  (
    --Fld1 type,
    --Fld2 type,
    --...
  );

  OPEN curs;

  SET bDone = 0;
  REPEAT
    FETCH curs INTO var1,, b;

    IF whatever_filtering_desired
       -- here for whatever_transformation_may_be_desired
       INSERT INTO tblResults VALUES (var1, var2, var3 ...);
    END IF;
  UNTIL bDone END REPEAT;

  CLOSE curs;
  SELECT * FROM tblResults;
END

Beberapa hal yang perlu dipertimbangkan...

Tentang cuplikan di atas:

  • mungkin ingin meneruskan sebagian kueri ke Prosedur Tersimpan, mungkin khususnya kriteria penelusuran, untuk membuatnya lebih umum.
  • Jika metode ini dipanggil oleh beberapa sesi, dll., mungkin ingin melewatkan semacam ID Sesi untuk membuat nama tabel sementara yang unik (sebenarnya tidak perlu khawatir karena sesi yang berbeda tidak berbagi ruang nama file sementara yang sama; lihat komentar oleh Gruber, di bawah)
  • Beberapa bagian seperti deklarasi variabel, kueri SELECT, dll. perlu ditentukan dengan benar

Secara umum:mencoba menghindari kebutuhan kursor .

Saya sengaja menamai variabel kursor curs[e], karena kursor adalah berkah campuran. Mereka dapat membantu kita menerapkan aturan bisnis yang rumit yang mungkin sulit untuk diungkapkan dalam bentuk deklaratif SQL, tetapi kemudian membawa kita untuk menggunakan bentuk prosedural (imperatif), yang merupakan fitur umum SQL yang tidak terlalu ramah/ ekspresif, dari segi pemrograman, dan seringkali kurang efisien dari segi kinerja.

Mungkin Anda dapat melihat ekspresi transformasi dan pemfilteran yang diinginkan dalam konteks kueri SQL "polos" (deklaratif).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kode Kesalahan:1005. Tidak dapat membuat tabel '...' (errno:150)

  2. Bisakah saya mengembalikan satu tabel dari file mysql mysqldump penuh?

  3. MySQL di Docker - Cara Menampung Basis Data Anda :Buku Putih Baru

  4. Cara Menghubungkan Ke Server MySQL Setelah Menginstal XAMPP Di Mac OS

  5. PDO dapatkan ID terakhir yang dimasukkan