请问如何让一个表的b字段通过类似默认值的方式让其等于A字段的值

kunting 2012-08-04 10:06:08
请问如何让一个表的b字段通过类似默认值的方式让其等于A字段的值
我尝试过触发器在插入数据时更新b字段,但因为是同表操作,系统提示在触发器中无法读取该表,我想是因为表被锁定了的缘故,大家看看有没有其他通过数据库技术解决的方式呢?
...全文
72 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
人生无悔 2012-08-04
  • 打赏
  • 举报
回复
默认值只能是类似下面的常量,不可以是a列

create table t(
id int primary key,
a number,
b number default(2*3)
);

而且oracle也无计算列,在mssql中你可以这样写,设置一个计算列,但为只读的,但oracle不行

--mssql中
create table t(
id int primary key,
a int,
b as a
);
kunting 2012-08-04
  • 打赏
  • 举报
回复
不过还是想知道,oracle是否有默认值支持这种操作呢?
kunting 2012-08-04
  • 打赏
  • 举报
回复
谢谢 问题已经解决
人生无悔 2012-08-04
  • 打赏
  • 举报
回复

SQL> create table t(
2 id int primary key,
3 a number,
4 b number
5 );

表已创建。

SQL> create or replace trigger t_ins
2 before insert
3 on t
4 for each row
5 begin
6 :new.b:=:new.a;
7 end;
8 /

触发器已创建

SQL> insert into t(id,a) values(1,2);

已创建 1 行。

SQL> select * from t;

ID A B
---------- ---------- ----------
1 2 2
人生无悔 2012-08-04
  • 打赏
  • 举报
回复

create or replace trigger t_ins
before insert
on t
for each row
begin
:new.b:=:new.a;
end;
/

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧