Sql 复制自动递增字段,并在新字段中具有相同的值

Sql 复制自动递增字段,并在新字段中具有相同的值,sql,oracle,Sql,Oracle,我有一个具有自动递增字段ID的表,例如,我想将此列复制为ID2字符串,但我希望它在每次ID自动递增时更新。我知道这种方法非常具体,有点难看,但有没有办法做到这一点 例如:启动数据库 ID Title 1 titl_14 ... 19 titl_13 561 titl_1 671 titl_1 1765 titl_1 1834 titl_1 1909

我有一个具有自动递增字段ID的表,例如,我想将此列复制为ID2字符串,但我希望它在每次ID自动递增时更新。我知道这种方法非常具体,有点难看,但有没有办法做到这一点

例如:启动数据库

ID       Title          
1       titl_14  
...  
19       titl_13    
561     titl_1     
671     titl_1      
1765    titl_1      
1834    titl_1      
1909    titl_1      
1910    titl_1      
结果:

ID       Title    ID2(varchar)      
1       titl_14    1
...               ...
19       titl_13    19
561     titl_1     561
671     titl_1     671
1765    titl_1    1765
1834    titl_1    1834 
1909    titl_1    1909 
1910    titl_1    1910
当插入一个新数据时,ID和ID2都会自动变为1911


提前感谢您

在Oracle 12C中,您可以创建生成的列:

alter table t add id_str as (to_char(id));
在早期版本中,您可以使用视图获得几乎相同的效果


如果您确实想使用存储空间并提高性能,还可以直接将列添加到表中,并使用触发器设置值。

在Oracle 12C中,您可以创建一个生成的列:

alter table t add id_str as (to_char(id));
在早期版本中,您可以使用视图获得几乎相同的效果


如果您真的想耗尽存储空间并提高性能,还可以直接将列添加到表中,并使用触发器设置值。

这没有意义。为什么要生成两个标识列?Oracle是否执行自动增量?诚然,我们被困在10g上,但它使用的是序列。我需要实现一个函数,该函数需要字段作为字符串,但我的整个代码使用它作为int,因为转换器可以工作,但这将导致巨大的重构,我同意这是非常丑陋的。所以将id传递给包装在to_CHAR()中的函数?这里不需要太多的分解。创建一个带有
SELECT source.*的视图,从source
将CHAR(id)作为id2?这没有意义。为什么要生成两个标识列?Oracle是否执行自动增量?诚然,我们被困在10g上,但它使用的是序列。我需要实现一个函数,该函数需要字段作为字符串,但我的整个代码使用它作为int,因为转换器可以工作,但这将导致巨大的重构,我同意这是非常丑陋的。所以将id传递给包装在to_CHAR()中的函数?不需要太多的分解。创建一个带有
选择源代码。*的视图,以便将字符(id)作为id2从源代码创建?