我正在使用开源 CMS pimcore (http://www.pimcore.org),它在 MySQL 后端运行。
它使用相当复杂的视图来表示对象,并且当视图引用的另一个表中的列被重命名时,其中一个视图在某个阶段就被破坏了。每当我尝试通过 SQL 命令与表交互时,我都会收到错误:
查看“barriste_website.object_6”引用无效表或 视图的列或函数或定义者/调用者缺乏使用权 他们
我想简单地更新视图以引用重命名的列,但在开始研究之前我需要知道视图的当前结构 - 一旦视图被破坏,我究竟如何检索视图的结构?我试过了
SHOW CREATE VIEW object_6
但我收到同样的错误。
MySQL:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v';
SQL Server:
USE databasename
GO
EXEC sp_helptext viewName
或者也可以这样查询:
SELECT TABLE_NAME as ViewName,
VIEW_DEFINITION as ViewDefinition
FROM INFORMATION_SCHEMA.Views
您可以在其中添加
WHERE
以仅检索一个视图
只需使用“drop view object_6”删除视图,然后进入 pimcore 后端并再次保存类。然后视图会自动重新生成。
就我而言,罪魁祸首是使用
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
;