【问题标题】:How to fix a broken SQL view如何修复损坏的 SQL 视图
【发布时间】:2011-12-30 08:25:08
【问题描述】:

我正在使用在 MySQL 后端运行的开源 CMS pimcore (http://www.pimcore.org)。

它使用相当复杂的视图来表示对象,当视图引用的另一个表中的列被重命名时,其中一个在某个阶段已损坏。每当我尝试通过 SQL 命令与表交互时,我都会收到错误消息:

查看“barriste_website.object_6”引用无效表或 列或函数或视图的定义者/调用者缺乏使用权 他们

我想简单地更新视图以引用重命名的列,但在开始查看之前我需要知道视图的当前结构 - 一旦视图结构损坏,我该如何检索视图的结构?我试过了

SHOW CREATE VIEW object_6

但我收到同样的错误。

提前感谢您的帮助!

【问题讨论】:

    标签: mysql view


    【解决方案1】:

    在我的例子中,罪魁祸首是使用带有 aliasORDER BY 导致问题。我改变了看法:

    CREATE VIEW v_storename_totalnamelength AS
    SELECT
      (char_length(`a`.`ExtractedLongName`) + char_length(`a`.`ExtractedLongName`)) AS `TotalNameLength`
    FROM
      `promoter`.`v_storename_extracted` `a`
    ORDER BY
      `TotalNameLength` DESC
    ;
    

    到:

    CREATE VIEW v_storename_totalnamelength AS
    SELECT
      (char_length(`a`.`ExtractedLongName`) + char_length(`a`.`ExtractedLongName`)) AS `TotalNameLength`
    FROM
      `promoter`.`v_storename_extracted` `a`
    ORDER BY
      (char_length(`a`.`ExtractedLongName`) + char_length(`a`.`ExtractedLongName`)) DESC
    ;
    

    【讨论】:

      【解决方案2】:

      只需使用“drop view object_6”删除视图,然后进入 pimcore 后端并再次保存类。然后视图会自动重新生成。

      【讨论】:

      • 听起来不是个好主意,删除将删除对 SQL 语句的所有引用,这是在更改引用表中的列名后重构视图所需要的。
      • 我不确定这是否适用于 pimcore,但是我在使用标准 AWS MySQL 数据库时遇到了这个问题,并且删除视图不会自动重新生成它。幸运的是,我有一个视图的副本,发现有一些列被重命名,更新了代码中的名称并执行了视图代码。它自然地创建了正确的视图并解决了问题。
      【解决方案3】:

      MySQL:

      SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS
      WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v';
      

      参考:The INFORMATION_SCHEMA VIEWS Table

      SQL 服务器:

      USE databasename
      GO
      
      EXEC sp_helptext viewName
      

      或者也是这样的查询:

      SELECT TABLE_NAME as ViewName,
      VIEW_DEFINITION as ViewDefinition
      FROM INFORMATION_SCHEMA.Views
      

      您可以在其中添加 WHERE 以仅检索一个视图

      【讨论】:

      • 谢谢 Davide - 我认为 sp_helptext 只是 MSSQL,我需要 MySQL。
      猜你喜欢
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      相关资源
      最近更新 更多