[英]How to pass table name as argument in a stored procedure in mysql?
I am trying to implement the below query in a stored procedure.我正在尝试在存储过程中实现以下查询。
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
Stored Procedure:存储过程:
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 ;
Procedure Call:程序调用:
call TestSP(10, 'myTable');
Error:错误:
Error Code: 1113. A table must have at least 1 column
I'm not sure what's wrong with the code.我不确定代码有什么问题。 Thanks for your help.谢谢你的帮助。
You'd debug your code.你会调试你的代码。
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');
built SQL code内置 SQL 代码 |
---|
SELECT d.empno, d.fecthIdId, c.empno SELECT d.empno, d.fecthIdId, c.empno FROM MyDatabase.myTable a来自 MyDatabase.myTable JOIN MyDatabase.myTable b ON a.id = b.xid在 a.id = b.xid 上加入 MyDatabase.myTable b JOIN MyDatabase.Table2 c ON b.Id = cId在 b.Id = cId 上加入 MyDatabase.Table2 c JOIN MyDatabase.Table3 d ON a.bid = d.cid AND d.empId = _empId在 a.bid = d.cid 和 d.empId = _empId 上加入 MyDatabase.Table3 d |
Now copypaste this code into your CLI and try to execute it.现在将此代码复制粘贴到您的 CLI 中并尝试执行它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.