在 Firebird 2.5 中查找计算字段

Finding computed fields in Firebird 2.5

计算字段是只读的。我需要在特定 table.

中找到所有此类字段

此查询解决了此问题(returns 列是否已计算的信息):

select r.rdb$field_name, r.rdb$update_flag
from rdb$relation_fields r
where r.rdb$relation_name = 'specific_table'

至少看起来解决了,但是好像返回的信息不正确。

RDB$UPDATE_FLAG0 时,它是计算出来的(只读)。但它 0 即使对于普通列也是如此。

如果您想要计算字段 - 这就是您必须查询的内容,即用于计算的表达式。

RDB$FIELDS stores definitions of columns and domains, both system and custom. This is where the detailed data attributes are stored for all columns.

The column RDB$FIELDS.RDB$FIELD_NAME links to RDB$RELATION_FIELDS.RDB$FIELD_SOURCE

RDB$COMPUTED_BLR - The binary language representation (BLR) of the SQL expression the database server uses for evaluation when accessing a COMPUTED BY column

https://www.firebirdsql.org/file/documentation/html/en/refdocs/fblangref25/firebird-25-language-reference.html#fblangref-appx04-fields

因此,像这样的东西应该有效:

select r.rdb$field_name --, r.rdb$update_flag
from rdb$relation_fields r, RDB$FIELDS f
where r.rdb$relation_name = 'specific_table'
  and f.RDB$FIELD_NAME = r.RDB$FIELD_SOURCE
  and f.RDB$COMPUTED_BLR is not NULL

P.S。 https://github.com/FirebirdSQL/firebird-documentation/issues/157