Comment cela fonctionne
Dans les déclencheurs, les procédures et les fonctions, les dépendances portent sur les colonnes de la table à laquelle ils font référence, ainsi que sur tout paramètre ou variable défini dans le module à l’aide de la clause TYPE OF
.
Après que le noyau Firebird ait modifié un domaine, y compris les domaines implicites créés en interne lors de la définition des colonnes ou des paramètres, Firebird recompile en interne toutes les dépendances.
Note
|
L’invalidation se produit pour les procédures, les fonctions, les packages et les triggers, mais pas pour les blocs d’instructions DML, qui sont exécutés avec EXECUTE BLOCK. |
Tout module qui n’a pas pu être recompilé en raison d’une incompatibilité résultant d’un changement de domaine est marqué comme invalide (le champ RDB$VALID_BLR
est mis à 0 dans l’entrée de la table système correspondante (RDB$PROCEDURES
ou RDB$TRIGGERS
).
La réinitialisation (mise à 1 de RDB$VALID_BLR
) se produit lorsque
-
le domaine est à nouveau modifié et sa nouvelle définition est compatible avec la définition du module précédemment invalide ; ou
-
le module précédemment invalide est modifié de manière à correspondre à la nouvelle définition du domaine.
La requête ci-dessous recherche les procédures et les triggers dépendant d’un domaine particulier (dans l’exemple, il s’agit du domaine 'MYDOMAIN') et affiche l’état du champ RDB$VALID_BLR
:
WITH VALID_PSQL (
PSQL_TYPE,
ROUTE_NAME,
VALID)
AS (SELECT
'Procedure',
RDB$PROCEDURE_NAME,
RDB$VALID_BLR
FROM
RDB$PROCEDURES
WHERE
RDB$PROCEDURES.RDB$PACKAGE_NAME IS NULL
UNION ALL
SELECT
'Function',
RDB$FUNCTION_NAME,
RDB$VALID_BLR
FROM
RDB$FUNCTIONS
WHERE
RDB$FUNCTIONS.RDB$PACKAGE_NAME IS NULL
UNION ALL
SELECT
'Package',
RDB$PACKAGE_NAME,
RDB$VALID_BODY_FLAG
FROM
RDB$PACKAGES
UNION ALL
SELECT
'Trigger',
RDB$TRIGGER_NAME,
RDB$VALID_BLR
FROM
RDB$TRIGGERS
WHERE
RDB$TRIGGERS.RDB$SYSTEM_FLAG = 0)
SELECT
PSQL_TYPE,
ROUTE_NAME,
VALID
FROM
VALID_PSQL
WHERE
EXISTS(SELECT
*
FROM
RDB$DEPENDENCIES
WHERE
RDB$DEPENDENT_NAME = VALID_PSQL.ROUTE_NAME
AND RDB$DEPENDED_ON_NAME = 'MYDOMAIN');
/*
Remplacez MYDOMAIN par le nom réel du domaine à tester. Utilisez des lettres majuscules si le domaine a été créé sans tenir compte de la casse - sinon, utilisez l'orthographe exacte du nom de domaine en tenant compte de la casse.
*/
La requête suivante recherche les procédures et les déclencheurs qui dépendent d’une certaine colonne de table (dans l’exemple, il s’agit de la colonne 'MYCOLUMN' de la table 'MYTABLE') et fournit des informations sur l’état du champ RDB$VALID_BLR
:
WITH VALID_PSQL (
PSQL_TYPE,
ROUTE_NAME,
VALID)
AS (SELECT
'Procedure',
RDB$PROCEDURE_NAME,
RDB$VALID_BLR
FROM
RDB$PROCEDURES
WHERE
RDB$PROCEDURES.RDB$PACKAGE_NAME IS NULL
UNION ALL
SELECT
'Function',
RDB$FUNCTION_NAME,
RDB$VALID_BLR
FROM
RDB$FUNCTIONS
WHERE
RDB$FUNCTIONS.RDB$PACKAGE_NAME IS NULL
UNION ALL
SELECT
'Package',
RDB$PACKAGE_NAME,
RDB$VALID_BODY_FLAG
FROM
RDB$PACKAGES
UNION ALL
SELECT
'Trigger',
RDB$TRIGGER_NAME,
RDB$VALID_BLR
FROM
RDB$TRIGGERS
WHERE
RDB$TRIGGERS.RDB$SYSTEM_FLAG = 0)
SELECT
PSQL_TYPE,
ROUTE_NAME,
VALID
FROM
VALID_PSQL
WHERE
EXISTS(SELECT
*
FROM
RDB$DEPENDENCIES D
WHERE
D.RDB$DEPENDENT_NAME = VALID_PSQL.ROUTE_NAME
AND D.RDB$DEPENDED_ON_NAME = 'MYTABLE'
AND D.RDB$FIELD_NAME = 'MYCOLUMN');
/*
Remplacez MYTABLE et MYCOLUMN par les noms réels de la table et de sa colonne à vérifier.
Utilisez des lettres majuscules si la table et sa colonne ont été créées sans tenir compte de la casse - sinon, utilisez l'orthographe exacte du nom de la table et de sa colonne en tenant compte de la casse.
*/
Important
|
Tous les modules invalides causés par les changements de domaine/colonne sont reflétés dans le champ
|
Note
|
Autres commentaires
|