如何修复损坏的 SQL 视图

问题描述 投票:0回答:3

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

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

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

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

SHOW CREATE VIEW object_6

但我收到同样的错误。

mysql view
3个回答
29
投票

MySQL:

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

参考:INFORMATION_SCHEMA VIEWS 表

SQL Server:

USE databasename
GO

EXEC sp_helptext viewName

或者也可以这样查询:

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

您可以在其中添加

WHERE
以仅检索一个视图


7
投票

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


0
投票

就我而言,罪魁祸首是使用

ORDER BY
alias 导致了问题。我改变了我的看法:

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
;
© www.soinside.com 2019 - 2024. All rights reserved.