J'utilise le système de gestion de contenu open source pimcore (http://www.pimcore.org), qui s'exécute sur un serveur MySQL.
Il utilise des vues assez compliquées pour représenter des objets et l’un d’eux est devenu cassé à un moment donné lorsqu’une colonne d’une autre table référencée par la vue a été renommée. Chaque fois que j'essaie d'interagir avec la table via des commandes SQL, le message d'erreur suivant s'affiche:
La vue 'barriste_website.object_6' fait référence à une (des) table (s) non valide (s) ou colonne (s) ou fonction (s) ou définisseur/invocateur de la vue ne dispose pas des droits d’utilisation leur
J'aimerais simplement mettre à jour la vue pour référencer les colonnes renommées, mais je dois connaître la structure actuelle de la vue avant de commencer à fouiller. Comment puis-je récupérer exactement la structure de la vue une fois qu'elle est cassée? J'ai essayé
SHOW CREATE VIEW object_6
mais je reçois la même erreur.
Merci d'avance pour votre aide!
MySQL:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v';
reference: La table INFORMATION_SCHEMA VIEWS
Serveur SQL:
USE databasename
GO
EXEC sp_helptext viewName
ou aussi une requête comme celle-ci:
SELECT TABLE_NAME as ViewName,
VIEW_DEFINITION as ViewDefinition
FROM INFORMATION_SCHEMA.Views
où vous pouvez ajouter une WHERE
pour ne récupérer qu'une vue
Supprimez simplement la vue avec "drop view object_6", puis allez dans le backend pimcore et sauvegardez à nouveau la classe. La vue est ensuite régénérée automatiquement.
Dans mon cas, le coupable était d'utiliser ORDER BY
avec un alias causant le problème. J'ai changé d'avis de:
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
;