簡體   English   中英

如何在 mysql 的存儲過程中將表名作為參數傳遞?

[英]How to pass table name as argument in a stored procedure in mysql?

我正在嘗試在存儲過程中實現以下查詢。

SELECT d.empno, d.fecthIdId, c.empno
FROM MyDatabase.myTable  a
JOIN MyDatabase.myTable b ON a.id = b.xid 
JOIN MyDatabase.Table2 c ON b.Id = cId 
JOIN MyDatabase.Table3 d ON a.bid = d.cid AND d.empId = _empId

存儲過程:

DELIMITER $$
CREATE  PROCEDURE `TestSP`(_empId INT,   _myTable VARCHAR(50))
BEGIN

SET @mysql.SQL
= CONCAT('SELECT d.empno, d.fecthIdId, c.empno
FROM MyDatabase.',_myTable,'  a
JOIN MyDatabase.',_myTable,'  b ON a.id = b.xid 
JOIN MyDatabase.Table2 c ON b.Id = cId 
JOIN MyDatabase.Table3 d ON a.bid = d.cid AND d.empId = _empId');

PREPARE dynamicQuery FROM @mysql.SQL;
EXECUTE dynamicQuery;
DEALLOCATE PREPARE dynamicQuery;

END$$
DELIMITER ;

程序調用:

call TestSP(10, 'myTable');

錯誤:

  Error Code: 1113. A table must have at least 1 column

我不確定代碼有什么問題。 謝謝你的幫助。

你會調試你的代碼。

CREATE  PROCEDURE `TestSP`(_empId INT,   _myTable VARCHAR(50))
BEGIN

SET @mysql.SQL
= CONCAT('SELECT d.empno, d.fecthIdId, c.empno
FROM MyDatabase.',_myTable,'  a
JOIN MyDatabase.',_myTable,'  b ON a.id = b.xid 
JOIN MyDatabase.Table2 c ON b.Id = cId 
JOIN MyDatabase.Table3 d ON a.bid = d.cid AND d.empId = _empId');
/*
PREPARE dynamicQuery FROM @mysql.SQL;
EXECUTE dynamicQuery;
DEALLOCATE PREPARE dynamicQuery;
*/
SELECT @mysql.SQL `built SQL code`;
END
call TestSP(10, 'myTable');
內置 SQL 代碼
SELECT d.empno, d.fecthIdId, c.empno
來自 MyDatabase.myTable
在 a.id = b.xid 上加入 MyDatabase.myTable b
在 b.Id = cId 上加入 MyDatabase.Table2 c
在 a.bid = d.cid 和 d.empId = _empId 上加入 MyDatabase.Table3 d

小提琴

現在將此代碼復制粘貼到您的 CLI 中並嘗試執行它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM