Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menangkap Output Pertanyaan Dinamik ke dalam Parameter OUT dalam Prosedur Tersimpan MySQL?

Bagaimana untuk Menangkap Output Pertanyaan Dinamik ke dalam Parameter OUT dalam Prosedur Tersimpan MySQL?

Susan Sarandon
Susan Sarandonasal
2024-12-21 18:15:11664semak imbas

How to Capture Output of Dynamic Queries into OUT Parameters in MySQL Stored Procedures?

Mengoutputkan Keputusan Pertanyaan kepada Pembolehubah dalam Prosedur Tersimpan dengan Pertanyaan Dinamik

Pertanyaan dinamik menawarkan fleksibiliti dalam pengaturcaraan pangkalan data. Dalam MySQL, adalah mungkin untuk menjana pertanyaan dinamik dalam prosedur tersimpan dan melaksanakannya untuk mendapatkan hasil. Walau bagaimanapun, persoalan biasa timbul: bagaimana untuk menangkap output pertanyaan sedemikian ke dalam parameter OUT dalam prosedur tersimpan?

Pertimbangkan contoh berikut di mana pertanyaan dinamik dibina untuk mengira rekod (pertanyaan1) dan mendapatkan semula data (pertanyaan2 ):

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

Untuk menyelesaikan masalah ini, kita boleh menggunakan pendekatan yang diubah suai seperti yang digambarkan di bawah:

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;

Kaedah ini memulakan pembolehubah (@c2 dan @c3) untuk menahan output pertanyaan dinamik dan membina pertanyaan (@query) untuk mengisi pembolehubah ini dengan data daripada pangkalan data. Pertanyaan itu kemudiannya disediakan, dilaksanakan dengan parameter yang ditentukan dan hasilnya diberikan kepada parameter OUT (Param2 dan Param3) sebelum keluar dari prosedur.

Atas ialah kandungan terperinci Bagaimana untuk Menangkap Output Pertanyaan Dinamik ke dalam Parameter OUT dalam Prosedur Tersimpan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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