在Oracle 10G 建立表结构时有个“默认值”的东东这个怎么玩?
表ABC 列 A B C列A,B的值为正常输入。
列C的值=列A+列B,列C不能正常输入。
怎么在建立表结构时给列C设立个"默认值"
表ABC 列 A B C列A,B的值为正常输入。
列C的值=列A+列B,列C不能正常输入。
怎么在建立表结构时给列C设立个"默认值"
解决方案 »
- 问一个简单的不能再简单的问题,关于(+)的。
- 请问oracle存储过程中,循环的时候有没有像JAVA那种continue 功能
- ★★★★★【200分求解OCI的一些问题】★★★★
- 问个oracle安装如何继续使用原来目录的oradata问题
- 用pl/sql developer导出表,在其他数据库导入时,提示表或视图不存在?大侠们救命!!!
- oracle应用软件plsql中functions,procedures,packages有什么区别
- 請教各位高手一個很基本的問題
- oracle中stub技术?
- 在Oracle 中如何做自动增加的列?紧急!!!!!!
- Oracle的登录问题!
- 求一条添加的 语句!!!急!!!
- 数据导入出错,请进来看看!
而你要字段C的值是来自于字段A和B,并且default所描述的是一个确定值,
同时如果用check约束来作的话,这个check约束也不知道如何写啊?所以个人观点是:建表时是不能够完成你所说的要求,要完成这些可以在存储过程中来实现:在插入数据时进行检验,只有当字段C的值包含在字段A和B的值所组成的集合内时,才让数据插入,否则不插入,
--头部文件CREATE OR REPLACE TRIGGER tri_test
AFTER INSERT OR UPDATE
ON 表
FOR EACH ROW
PRAGRA AUTONOMOUS_TRANSACTION
--执行段
BEGIN
IF INSERTING or UPDATING THEN
:new.c =:new.a+:new.b;
END IF;
EXCEPTION
WHEN others THEN
null;
END;
before insert or update on table1
for each row
declare
-- local variables here
begin
:NEW.c := :NEW.a + :NEW.b;
end trig_test;
如果是11g的话可以用11g的新特性 虚拟列来定义c字段c as (a+b)
这是11g的新特性
定义表的时候
create table table_a (
a number(2),
b number(2),
c as (a+b)
)如果不是11g就只能
用trigger来做了,或者,查询的时候自己定义一个view字段。
create table show
(
a number,
b number
)create view show_view as select a,b,a+b as c from show
select * from show_view
insert into show values (1,2)