【问题标题】: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 构建存储过程

【问题讨论】:

    标签: mysql sql stored-procedures mariadb


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多