标签: 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 …

oracle virtual-columns

6
推荐指数
1
解决办法
5525
查看次数

如果 <table> 具有虚拟列,是否(以及如何)在 Oracle 中“插入到 <table> 值 <rowtype-variable>”

这是一张桌子

create table tq84_virtual_test_without (
  col_1 number,
  col_2 number,
  col_3 number,
  col_4 number,
  col_5 number
);
Run Code Online (Sandbox Code Playgroud)

规则col_5的值是其他四列的总和。

所以表格被相应地填充:

insert into tq84_virtual_test_without values( 1, 2, 3, 4, 10);
insert into tq84_virtual_test_without values( 3, 8, 7, 5, 23);

commit;
Run Code Online (Sandbox Code Playgroud)

现在,假设需要复制一行并更改列的值。这当然可以非常优雅地完成(恕我直言,也就是说)使用rowtype-variable,就像这样

declare
  r tq84_virtual_test_without%rowtype;
begin

  select * into r from tq84_virtual_test_without where col_2 = 8;

  r.col_4 := r.col_4 - 2;
  r.col_5 := r.col_5 - 2;

  insert into tq84_virtual_test_without values r;

end;
/
Run Code Online (Sandbox Code Playgroud)

这很优雅,因为它不会用insert into …

oracle oracle-11g-r2 insert virtual-columns

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

oracle ×2

virtual-columns ×2

insert ×1

oracle-11g-r2 ×1