在MySQL 預存程序中使用表格名稱變數
使用MySQL 預存程序時,將表格名稱傳遞為參數,允許更靈活地從不同表中選擇資料。然而,簡單地在過程中指定表名作為參數可能無法如預期運作。
要正確地將表名傳遞到預存程序中,需要使用動態 SQL,它允許執行 SQL在執行時間建構的語句。實現此目的的一種方法是使用準備好的語句。
考慮以下範例:
CREATE PROCEDURE `usp_SelectFromTables`( IN TableName varchar(100) ) BEGIN SET sql_text = CONCAT('SELECT * FROM ', TableName); PREPARE stmt FROM @sql_text; EXECUTE stmt; DEALLOCATE PREPARE stmt; END
在這個過程中,傳入的 TableName 參數用於建構動態 SQL 語句( sql_text),然後準備並執行。這允許預存程序在執行時對指定表執行 SELECT 查詢。
或者,可以在呼叫準備好的語句中直接建構動態SQL,如下所示:
SET sql_text = CONCAT('select concept_id,concept_name,',@vname,' from enc2.concept a JOIN enc2.ratings b USING(concept_id) where concept_name like (''%',@cname,'%'') and 3 is not null order by 3 asc'); PREPARE stmt FROM sql_text; EXECUTE stmt; DEALLOCATE PREPARE stmt;
這種方法不需要額外的變數來保存SQL 語句,從而簡化了代碼。
透過使用動態 SQL,我們可以將表名作為參數傳遞到預存程序,使我們能夠根據輸入參數動態地從各個表中選擇資料。
以上是如何在 MySQL 預存程序中使用表名變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!