Dalam MySQL, mengekstrak nama lajur daripada jadual ialah keperluan biasa untuk tugasan manipulasi pangkalan data. Untuk menggelungkan nama lajur secara pengaturcaraan dan melaksanakan operasi berdasarkan nilainya, prosedur tersimpan boleh digunakan.
Pernyataan SHOW COLUMNS FROM myTable mengambil semula metadata lajur, termasuk nama mereka. Walau bagaimanapun, untuk mengulangi nama-nama ini dalam prosedur tersimpan, kursor dan struktur gelung diperlukan.
Pelaksanaan Kursor dan Gelung
Kursor ialah alat yang membenarkan lelaran berurutan melalui satu set rekod. Dalam kes ini, kursor col_names digunakan untuk mengambil nama lajur daripada jadual INFORMATION_SCHEMA.COLUMNS. Pernyataan OPEN memulakan kursor, manakala FETCH memajukan kursor ke baris seterusnya dan memberikan nilai yang diambil kepada pembolehubah yang ditentukan.
DECLARE col_names CURSOR FOR SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'tbl_name' ORDER BY ordinal_position;
Untuk melaksanakan gelung, pembolehubah pembilang i dimulakan dan dibandingkan dengan bilangan baris yang dikembalikan oleh FOUND_ROWS() untuk menentukan bila gelung akan tamat. Dalam gelung, pernyataan FETCH mendapatkan semula nama lajur seterusnya dan memberikannya kepada pembolehubah col_name. Operasi yang akan dilakukan pada nama lajur boleh dimasukkan di sini.
SET i = 1; the_loop: LOOP IF i > num_rows THEN CLOSE col_names; LEAVE the_loop; END IF; FETCH col_names INTO col_name; //do whatever else you need to do with the col name SET i = i + 1; END LOOP the_loop;
Contoh Praktikal
Dengan menggunakan pendekatan ini, ia menjadi mungkin untuk mengakses nama lajur secara dinamik dan melaksanakan operasi ke atasnya dalam prosedur tersimpan. Pertimbangkan contoh berikut:
CREATE PROCEDURE get_cols() BEGIN DECLARE col_names CURSOR FOR SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'my_table' ORDER BY ordinal_position; DECLARE done INT DEFAULT FALSE; DECLARE col_name VARCHAR(255); OPEN col_names; main_loop: LOOP FETCH col_names INTO col_name; IF done THEN LEAVE main_loop; END IF; -- Perform operations on col_name END LOOP main_loop; CLOSE col_names; END;
Dalam prosedur ini, nama lajur diambil daripada jadual my_table. Bendera selesai mengawal keluar dari gelung apabila tiada lagi nama lajur tersedia. Operasi tersuai boleh ditambah dalam main_loop untuk melaksanakan tugas tertentu berdasarkan nama lajur.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Berulang Secara Dinamik Melalui Nama Lajur MySQL dalam Prosedur Tersimpan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!