Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan Keluaran daripada Pertanyaan Dinamik dalam Prosedur Tersimpan MySQL?

Bagaimana untuk Mendapatkan Keluaran daripada Pertanyaan Dinamik dalam Prosedur Tersimpan MySQL?

Mary-Kate Olsen
Lepaskan: 2024-12-17 16:51:11
asal
689 orang telah melayarinya

How to Retrieve Output from Dynamic Queries within MySQL Stored Procedures?

Melaksanakan Pertanyaan Dinamik dan Mendapatkan Keluaran dalam Prosedur Tersimpan MySQL

Dalam MySQL, prosedur tersimpan membolehkan anda melaksanakan operasi kompleks dengan cekap. Satu senario biasa ialah menjana pertanyaan secara dinamik berdasarkan parameter input dan mendapatkan semula hasilnya ke dalam pembolehubah.

Untuk mencapai ini, anda boleh menggunakan penyata yang disediakan dan parameter output. Mari kita pertimbangkan prosedur tersimpan berikut:

CREATE PROCEDURE 'searchInvoice'
(
  OUT numOfRecords INT
)
BEGIN
  DECLARE query1 TEXT; 
  DECLARE query2 TEXT; 

 SET query1 = 'SELECT COUNT(*) bla bla bla.....'; 
 // Query1 to select the count of matching tuples..

 SET query2 = 'SELECT * from bla bla bla....';
 // Query2 to select original records...

 // later part of this both queries generate dynamically according to some IN parameters..

 // now I wanna assign the output of the query1 into numOfRecords 
 // and I wanna execute the query2 as well.. like this

    SET @Sql = query2;        
    PREPARE STMT FROM @Sql; 
    EXECUTE STMT; 
    DEALLOCATE PREPARE STMT;

 // output of the query2 can be read in PHP

END
Salin selepas log masuk

Untuk mendapatkan semula output query1 ke dalam parameter numOfRecords, anda boleh menggunakan pendekatan berikut:

CREATE TABLE table1(
  column1 VARCHAR(255) DEFAULT NULL,
  column2 VARCHAR(255) DEFAULT NULL,
  column3 VARCHAR(255) DEFAULT NULL
);

INSERT INTO table1 VALUES 
  ('1', 'value1', 'value2'),
  ('2', 'value3', 'value4');

DELIMITER $$
CREATE PROCEDURE procedure1(IN Param1 VARCHAR(255), OUT Param2 VARCHAR(255), OUT Param3 VARCHAR(255))
BEGIN
  SET @c2 = '';
  SET @c3 = '';
  SET @query = 'SELECT column2, column3 INTO @c2, @c3 FROM table1 WHERE column1 = ?';
  PREPARE stmt FROM @query;
  SET @c1 = Param1;
  EXECUTE stmt USING @c1;
  DEALLOCATE PREPARE stmt;
  SET Param2 = @c2;
  SET Param3 = @c3;
END$$
DELIMITER ;

-- Call procedure and use variables
SET @Param1 = 2;
SET @Param2 = '';
SET @Param3 = '';
CALL procedure1(@Param1, @Param2, @Param3);
SELECT @Param2, @Param3;
Salin selepas log masuk

Dalam contoh ini:

  1. Pernyataan SET @c2 = '' dan SET @c3 = '' memulakan output parameter.
  2. Pernyataan SET @query = 'SELECT ...' menyediakan pertanyaan secara dinamik.
  3. Pernyataan SET @c1 = Param1 memberikan parameter input kepada pertanyaan.
  4. Penyataan EXECUTE stmt MENGGUNAKAN @c1 melaksanakan pertanyaan yang disediakan.
  5. Pernyataan DEALLOCATE PREPARE stmt statement mengeluarkan sumber pernyataan yang disediakan.
  6. Penyataan SET Param2 = @c2 dan SET Param3 = @c3 memberikan nilai output kepada parameter.
  7. Akhir sekali, SELECT @Param2, Pernyataan @Param3 mendapatkan semula output nilai.

Dengan menggunakan teknik ini, anda boleh mendapatkan semula output pertanyaan yang dijana secara dinamik ke dalam pembolehubah dalam prosedur tersimpan MySQL.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Keluaran daripada Pertanyaan Dinamik dalam Prosedur Tersimpan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan