是否可以搜索某个字段的所有依赖关系

ebu*_*g38 0 firebird ibexpert

我正在数据库中搜索特定行,并想知道 ibexpert 中是否有函数可以查找字段的所有依赖项。

Mar*_*eel 5

我不知道 IBExpert,但一般在 Firebird 中,您可以在系统表中找到依赖项RDB$DEPENDENCIES。它不会准确地告诉您某个字段在哪一行代码中使用,但它将帮助您识别在哪个对象中使用该字段。然后就是检查该特定对象的源代码以查看它的使用位置。

该表RDB$DEPENDENCIES包含以下列(在 Firebird 2.5 中):

  • RDB$DEPENDENT_NAME- “依赖项”的名称(使用依赖项的对象),例如存储过程名称
  • RDB$DEPENDED_ON_NAME- 依赖项的名称(例如表名称)
  • RDB$FIELD_NAME- 依赖项的字段名称(例如表列);可以用于NULL非字段依赖
  • RDB$DEPENDENT_TYPE- 依赖项的类型(例如 0 = 关系(表或视图),请参阅RDB$TYPESwithRDB$FIELD_NAME = 'RDB$OBJECT_TYPE了解可能的值)
  • RDB$DEPENDED_ON_TYPE- 依赖项的类型(列依赖项的类型为 0 且不RDB$FIELD_NAME为 null,表/视图依赖项的类型为 0 且为RDB$FIELD_NAMEnull。

例如,您可以使用以下查询:

select dep.*, tt.RDB$TYPE_NAME as DEPENDENT_OBJECT_TYPE, dt.RDB$TYPE_NAME as DEPENDED_ON_OBJECT_TYPE
from RDB$DEPENDENCIES dep
inner join RDB$TYPES tt
  on tt.RDB$TYPE = dep.RDB$DEPENDENT_TYPE 
    and tt.RDB$FIELD_NAME = 'RDB$OBJECT_TYPE'
inner join RDB$TYPES dt
  on dt.RDB$TYPE = dep.RDB$DEPENDED_ON_TYPE 
    and dt.RDB$FIELD_NAME = 'RDB$OBJECT_TYPE'
Run Code Online (Sandbox Code Playgroud)