Hor*_*ndo 6 oracle virtual-columns
有谁知道任何包含“真实”列到虚拟列的引用的 Oracle 字典视图?
例如,假设我有一个这样的表:
create table t (
c1 varchar2(5)
,c2 as (c1 || '*')
)
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种确定 c1 具有 c2 依赖项的方法(不尝试解析 user_tab_cols.data_default)。我正在编写一个模式同步工具,我正在尝试弄清楚我需要做什么才能将表与执行最少工作的“模型”同步。如果模型显示上表中的 c1 从 varchar2(5) 更改为 varchar2(6),我希望能够确定我需要执行以下操作:
alter table t modify( c2 as ( null ) );
alter table t modify( c1 varchar2(6) );
alter table t modify( c2 as ( c1 || '*' ) );
Run Code Online (Sandbox Code Playgroud)
并避免使用 ORA-54031。
[编辑]
似乎我在解释我的问题时不够清楚,所以这里是。
当我们的开发人员开始处理错误时,他们会创建应用程序的 git 分支以及填充了主 git 分支内容的数据库模式。在处理 bug 时,开发人员可能会进行 DML 更改或偶尔会进行 DDL 更改(当然还有代码更改)。一旦他们的 bug 完成并被审查,他们的 git 分支就会与 master 合并。同步工具允许对数据库模式进行完整的“差异”——从内容和结构的角度来看。这构成了审查的一部分。开发人员使用同步工具生成其架构的导出,此导出是分支的一部分。在 bug 分支合并到 master 之后,master 数据库模式从开发人员完成的导出中同步。
是的,脚本将是解决问题的一种方法,但它需要一定程度的纪律,而这并非所有开发人员都具备。同步工具目前处理我概述的场景,但 imo 有点笨拙。我问我最初的问题的原因是,如果我能够通过字典视图确定真实列和虚拟列之间的关系,我的工具生成的同步 sql 将更加“外科手术”。
谢谢。
小智 2
User_tab_cols 显示当 virtual_column 包含“YES”时存在依赖性,这满足了您确定是否存在任何依赖性的需要。
为了确定实际的虚拟列由什么组成,仍然需要解析 data_default。
SELECT column_name
, virtual_column
, segment_column_id
, internal_column_id
FROM user_tab_cols
WHERE table_name = 'T'
ORDER BY column_id;
| 归档时间: |
|
| 查看次数: |
5525 次 |
| 最近记录: |