我在做开发的时候,有一个表中的字段有default属性,遇到了一个问题一直没有解决,所以在论坛上来求教各位。
第一步建表:
create table dotest
(
num1 NUMBER(16,2) AS(NVL(NUM2,0) + NVL(NUM3,0) + 0),
num2 NUMBER(16,2),
num3 NUMBER(16,2),
num4 NUMBER(16,2)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64
next 8
minextents 1
maxextents unlimited
);
第二步生成一条数据:
INSERT INTO dotest(NUM2,NUM3) VALUES(100,100);
第三步修改数据:
UPDATE dotest SET NUM4 = NUM1 * 1.5;
然后你查询一下数据,看看字段NUM4的值,正常是300
SELECT * FROM dotest;我在项目的生产机上发现了一个问题,生产环境上存在一个这样有default属性字段的表,我用update语句更新其中的一个字段,就如上边用NUM1【default属性的字段】来更新NUM4字段一样,困扰我的问题是更新后的结果一直是0,但是不管我怎么再做如上的测试也不会重现这个问题,最后没有办法我在生产机上重建了这个表,就没有这个问题了。求教各位看看是否也遇到过这个问题,到底是什么原因导致的这个问题。
第一步建表:
create table dotest
(
num1 NUMBER(16,2) AS(NVL(NUM2,0) + NVL(NUM3,0) + 0),
num2 NUMBER(16,2),
num3 NUMBER(16,2),
num4 NUMBER(16,2)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64
next 8
minextents 1
maxextents unlimited
);
第二步生成一条数据:
INSERT INTO dotest(NUM2,NUM3) VALUES(100,100);
第三步修改数据:
UPDATE dotest SET NUM4 = NUM1 * 1.5;
然后你查询一下数据,看看字段NUM4的值,正常是300
SELECT * FROM dotest;我在项目的生产机上发现了一个问题,生产环境上存在一个这样有default属性字段的表,我用update语句更新其中的一个字段,就如上边用NUM1【default属性的字段】来更新NUM4字段一样,困扰我的问题是更新后的结果一直是0,但是不管我怎么再做如上的测试也不会重现这个问题,最后没有办法我在生产机上重建了这个表,就没有这个问题了。求教各位看看是否也遇到过这个问题,到底是什么原因导致的这个问题。
如果是虚拟列的话,确实num4的值为300是正常的。我猜测,你原来的表中,num1并不是虚拟列,而是default为0的一个字段,因此update后,num4也是0。如果不是这样的话,那就可能是bug
你要确定下 num1 是不是 有上面表红的 虚拟列的标识了!