FreeAdhocUDF pour InterBase et FireBird in deutschin englishen françaisen españolin italianoa português
homeprevious pagecontentnext pagelast page Seite empfehlen • advice website •Forum Mailing-Liste • mailinglist • liste de diffusionwas ich vermisse • what I missed •eMail Kommentar • eMail commentprintsitemap
Possibilité de mise à jour des UDF lorsqu’il y a des dépendances fonctionnelles

Lorsque l’on veut passer à une nouvelle version de UDF FreeAdhoc, on a souvent à faire face aux dépendances fonctionnelles qui existent dans une base de données (utilisées dans les champs ComputedBy, les déclencheurs (triggers), les vues ou les procédures stoquées) et qui empêchent la suppression d’une fonction. Jusqu’à InterBase 6, il était possible de supprimer les dépendances.
Il y a cependant un moyen de contourner cette difficulté par la procédure suivante qui n’est certes pas très normale, mais qui peut cependant être utilisée sans risque.
/* UDF (Elle concerne toutes les fonctions) */
Version pour InterBase
UPDATE RDB$DEPENDENCIES SET RDB$DEPENDED_ON_NAME = 'xyz' || RDB$DEPENDED_ON_NAME
WHERE RDB$DEPENDED_ON_TYPE = 14;
Version pour FireBird
UPDATE RDB$DEPENDENCIES SET RDB$DEPENDED_ON_NAME = 'xyz' || RDB$DEPENDED_ON_NAME
WHERE RDB$DEPENDED_ON_TYPE = 15;
/* Éliminer alors les fonctions UDF */
DROP  EXTERNAL FUNCTION F_.....;
DROP  EXTERNAL FUNCTION F_.....;
...
/* Installer maintenant les nouvelles fonctions UDF  FreeAdhoc au moyen de  leur script */
...
/* Puis rétablir les dépendances fonctionnelles antérieures  */
Version pour InterBase
UPDATE RDB$DEPENDENCIES
SET RDB$DEPENDED_ON_NAME = F_REPLACESTRING(RDB$DEPENDED_ON_NAME, 'xyz', '', 0, 0)
WHERE RDB$DEPENDED_ON_TYPE = 14 AND RDB$DEPENDED_ON_NAME STARTING WITH 'xyz';  
Version pour FireBird
UPDATE RDB$DEPENDENCIES
SET RDB$DEPENDED_ON_NAME = F_REPLACESTRING(RDB$DEPENDED_ON_NAME, 'xyz', '', 0, 0)
WHERE RDB$DEPENDED_ON_TYPE = 15 AND RDB$DEPENDED_ON_NAME STARTING WITH 'xyz';      

Remarque:
Dans les versions 6.0 et antérieures de InterBase, la table RDB$DEPENDENCIES n’existait pas et par conséquent les dépendances fonctionnelles n’étaient pas enregistrées. À partir de InterBase 6.5 et de FireBird 1.5, toutes les dépendances fonctionnelles sont reprises dans la table RDB$DEPENDENCIES.
Le script suivant permet de visualiser les dépendances fonctionnelles d’une base de données.
Version pour InterBase à partir de 7.5
SELECT RDB$DEPENDENT_NAME AS DEPENDENT_NAME,
  RDB$DEPENDED_ON_NAME AS DEPENDS_ON,
  RDB$FIELD_NAME AS FIELD_NAME,
  RDB$DEPENDENT_TYPE DEPENDENT_TYPE,
    CASE
      WHEN RDB$DEPENDENT_TYPE = 0 THEN 'TABLE'
      WHEN RDB$DEPENDENT_TYPE = 1 THEN 'VIEW'
      WHEN RDB$DEPENDENT_TYPE = 2 THEN 'TRIGGER'
      WHEN RDB$DEPENDENT_TYPE = 3 THEN 'COMPUTED'
      WHEN RDB$DEPENDENT_TYPE = 4 THEN 'VALIDATION'
      WHEN RDB$DEPENDENT_TYPE = 5 THEN 'PROCEDURE'
      WHEN RDB$DEPENDENT_TYPE = 6 THEN 'EXPRESSION_INDEX'
      WHEN RDB$DEPENDENT_TYPE = 7 THEN 'EXCEPTION'
      WHEN RDB$DEPENDENT_TYPE = 8 THEN 'USER'
      WHEN RDB$DEPENDENT_TYPE = 9 THEN 'FIELD'
      WHEN RDB$DEPENDENT_TYPE = 10 THEN 'INDEX'
      WHEN RDB$DEPENDENT_TYPE = 11 THEN 'GENERATOR'
      WHEN RDB$DEPENDENT_TYPE = 14 THEN 'UDF'
      ELSE 'UNKNOWN'
      END AS DEPENDENT_TYPE_STR,
    RDB$DEPENDED_ON_TYPE AS DEPEND_ON_TYPE,
    CASE
      WHEN RDB$DEPENDED_ON_TYPE = 0 THEN 'TABLE'
      WHEN RDB$DEPENDED_ON_TYPE = 1 THEN 'VIEW'
      WHEN RDB$DEPENDED_ON_TYPE = 2 THEN 'TRIGGER'
      WHEN RDB$DEPENDED_ON_TYPE = 3 THEN 'COMPUTED'
      WHEN RDB$DEPENDED_ON_TYPE = 4 THEN 'VALIDATION'
      WHEN RDB$DEPENDED_ON_TYPE = 5 THEN 'PROCEDURE'
      WHEN RDB$DEPENDED_ON_TYPE = 6 THEN 'EXPRESSION_INDEX'
      WHEN RDB$DEPENDED_ON_TYPE = 7 THEN 'EXCEPTION'
      WHEN RDB$DEPENDED_ON_TYPE = 8 THEN 'USER'
      WHEN RDB$DEPENDED_ON_TYPE = 9 THEN 'FIELD'
      WHEN RDB$DEPENDED_ON_TYPE = 10 THEN 'INDEX'
      WHEN RDB$DEPENDED_ON_TYPE = 11 THEN 'GENERATOR'
      WHEN RDB$DEPENDED_ON_TYPE = 14 THEN 'UDF'
      ELSE 'UNKNOWN'
      END AS DEPENDS_ON_TYPE_STR
FROM RDB$DEPENDENCIES
ORDER BY RDB$DEPENDENT_NAME
Version pour FireBird à partir de 2.0
SELECT RDB$DEPENDENT_NAME AS DEPENDENT_NAME,
  RDB$DEPENDED_ON_NAME AS DEPENDS_ON,
  RDB$FIELD_NAME AS FIELD_NAME,
  RDB$DEPENDENT_TYPE DEPENDENT_TYPE,
    CASE
      WHEN RDB$DEPENDENT_TYPE = 0 THEN 'TABLE'
      WHEN RDB$DEPENDENT_TYPE = 1 THEN 'VIEW'
      WHEN RDB$DEPENDENT_TYPE = 2 THEN 'TRIGGER'
      WHEN RDB$DEPENDENT_TYPE = 3 THEN 'COMPUTED'
      WHEN RDB$DEPENDENT_TYPE = 4 THEN 'VALIDATION'
      WHEN RDB$DEPENDENT_TYPE = 5 THEN 'PROCEDURE'
      WHEN RDB$DEPENDENT_TYPE = 6 THEN 'EXPRESSION_INDEX'
      WHEN RDB$DEPENDENT_TYPE = 7 THEN 'EXCEPTION'
      WHEN RDB$DEPENDENT_TYPE = 8 THEN 'USER'
      WHEN RDB$DEPENDENT_TYPE = 9 THEN 'FIELD'
      WHEN RDB$DEPENDENT_TYPE = 10 THEN 'INDEX'
      WHEN RDB$DEPENDENT_TYPE = 14 THEN 'GENERATOR'
      WHEN RDB$DEPENDENT_TYPE = 15 THEN 'UDF'
      ELSE 'UNKNOWN'
      END AS DEPENDENT_TYPE_STR,
    RDB$DEPENDED_ON_TYPE AS DEPEND_ON_TYPE,
    CASE
      WHEN RDB$DEPENDED_ON_TYPE = 0 THEN 'TABLE'
      WHEN RDB$DEPENDED_ON_TYPE = 1 THEN 'VIEW'
      WHEN RDB$DEPENDED_ON_TYPE = 2 THEN 'TRIGGER'
      WHEN RDB$DEPENDED_ON_TYPE = 3 THEN 'COMPUTED'
      WHEN RDB$DEPENDED_ON_TYPE = 4 THEN 'VALIDATION'
      WHEN RDB$DEPENDED_ON_TYPE = 5 THEN 'PROCEDURE'
      WHEN RDB$DEPENDED_ON_TYPE = 6 THEN 'EXPRESSION_INDEX'
      WHEN RDB$DEPENDED_ON_TYPE = 7 THEN 'EXCEPTION'
      WHEN RDB$DEPENDED_ON_TYPE = 8 THEN 'USER'
      WHEN RDB$DEPENDED_ON_TYPE = 9 THEN 'FIELD'
      WHEN RDB$DEPENDED_ON_TYPE = 10 THEN 'INDEX'
      WHEN RDB$DEPENDED_ON_TYPE = 14 THEN 'GENERATOR'
      WHEN RDB$DEPENDED_ON_TYPE = 15 THEN 'UDF'
      ELSE 'UNKNOWN'
      END AS DEPENDS_ON_TYPE_STR
FROM RDB$DEPENDENCIES
ORDER BY RDB$DEPENDENT_NAME

On remarque la différence dans les ‹TYPE› après 10 :
- 11 : GENERATOR dans InterBase ; pas utilisé en FireBird
- 14 : UDF dans InterBase ; GENERATOR dans FireBird
- 15 : pas utilisé en InterBase ; UDF dans FireBird.  
nach oben • go top • vers le hautnächste Seite • next page • prochain site