使用组合两列的默认值创建表

时间:2010-09-24 12:47:18

标签: oracle

是否可以创建一个包含两列值的列的表? 像这样的东西:

创建表test1 ( number1十进制(6,2), number2十进制(6,2), 总小数(6,2)DEFAULT(number1 + number2) );

3 个答案:

答案 0 :(得分:5)

是的,在11G。它被称为“虚拟”列。语法是:

create table test1
 ( number1 number(6,2),
   number2 number(6,2),
   total number(6,2) generated always as (number1+number2) );

(Oracle AFAIK中没有DECIMAL数据类型,所以我使用了NUMBER。)

另请参阅:documentation

注意“生成的始终”关键字是可选的。

“as”之后允许的表达类型被描述为here

答案 1 :(得分:0)

您需要使用计算列。

答案 2 :(得分:0)

您可以使用触发器执行此操作:

create table test1
  (number1 decimal(6,2),
   number2 decimal(6,2),
   total decimal(6,2));

CREATE TRIGGER test1_bi
  BEFORE INSERT ON test1
  FOR EACH ROW
BEGIN
  IF :new.total is NULL THEN
    :NEW.TOTAL := :new.number1 + :new.number2;
  END IF;
END test1_bi;

INSERT INTO test1(number1, number2) VALUES(1, 2);

SELECT * FROM test1;

在SELECT之后,你会发现TOTAL的值为3,正如预期的那样。

分享并享受。