使用MySQL 預存程序中的變數進行動態表選擇
要利用MySQL 中的儲存程序從各表中選取資料,表名稱必須作為參數傳遞。然而,在嘗試執行此操作時遇到問題可能會令人沮喪。
讓我們解決提供的範例,其中以下程式碼未按預期工作:
CREATE PROCEDURE `usp_SelectFromTables`( IN TableName varchar(100) ) BEGIN SELECT * FROM @TableName; END
嘗試執行此操作時遇到的錯誤代碼是TableName不存在。這是因為變數 @TableName 未正確解析。為了解決這個問題,採用了動態 SQL。
動態 SQL 允許執行在執行時期建立的 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
在此程式碼中,CONCAT() 函數用於根據提供的表格名稱建構 SQL 語句。 PREPARE 語句準備要執行的動態 SQL,EXECUTE 語句執行它。最後,DEALLOCATE PREPARE 語句釋放準備好的語句,釋放資源。
以上是如何使用MySQL預存程序動態選取不同表中的資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!