在 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_FLAG
为 0
时,它是计算出来的(只读)。但它 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
因此,像这样的东西应该有效:
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
计算字段是只读的。我需要在特定 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_FLAG
为 0
时,它是计算出来的(只读)。但它 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 toRDB$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 aCOMPUTED BY
column
因此,像这样的东西应该有效:
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