如何对视图使用存储过程进行动态查询?
Posted
技术标签:
【中文标题】如何对视图使用存储过程进行动态查询?【英文标题】:How to make dinamic query for view use stored procedure? 【发布时间】:2019-12-19 03:20:44 【问题描述】:你愿意帮我创建一个这样的存储过程吗?
我有这样的查询:
select * from db_2014.tablename
union
select * from db_2015.tablename
union
select * from db_2016.tablename
但是数据库名称(年份名称)应该从一个表中获取,该表已经存储了“年份”字段。 数据库名称为“年份”的表:
select Year from db_Years.tablename;
我被我的存储过程困住了:
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
END;
SET @isunion = " union ";
SET @queryGetYears = "select Year from db_name.tablename group by Year order by Year asc";
/*LOOPING RESULT OF @queryGetYears*/
SET @queryFetchDBByYear = CONCAT("select * from db_","-getFieldYear-",".tablename",@isunion);
/*END LOOPING*/
/*END SHOWING THE RESULT OF @queryFetchDBByYear*/
PREPARE stmt from @queryGetYears;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
是否可以使用存储过程来实现这一点? 感谢您的关注。
注意:使用 Navicat 构建存储过程
【问题讨论】:
【参考方案1】:您可以使用下面的代码来获取联合查询。
begin
select group_concat(concat('select * from db_',yr,'.tablename') separator '\nunion all\n') into @unionqry
from (select `Year` as yr from db_name.tablename group by `Year`) t;
prepare stmt from @unionqry;
execute stmt;
deallocate prepare stmt;
end
【讨论】:
以上是关于如何对视图使用存储过程进行动态查询?的主要内容,如果未能解决你的问题,请参考以下文章