oracle如何同时往主外键表中插入值

如 现在向 a和b 表中插入值
a(ID1, name,sex)
b(ID2,ID1,Fraction)
ID1,ID2 同为自动增长 ID1 为b表的外键参照a表的ID1
如何点击保存后同时插入
上面说错了 ID1,ID2不是数据库里自增长的 是自己定义的编码规则

1、先创建a和b表的序列
CREATE SEQUENCE SEQ_A;
CREATE SEQUENCE SEQ_B;
2、插入A表并返回A表当前ID
v_id1 number(20);
insert into a (ID1,name,sex)values(SEQ_A.NEXTVAL,name_value,sex_value) return ID1 into v_id1;
3、插入B表
insert into b (ID2,ID1,Fraction)values(SEQ_B.NEXTVAL,v_id1,franction_value);
4、事务提交
commit;追问

那个a表ID1不是数据库里面定义自增的 是自己定义其规则的

追答

Oracle中没有自增数据类型,是通过创建序列 (CREATE SEQUENCE SEQ_A)然后在插入表时调用 序列名.NEXTVAL (SEQ_A.NEXTVAL)来完成的。SEQ_A.NEXTVAL每调用一次就会自动加1,也可以自定义步长 比如+2。

追问

我可能没说清楚 我是说那ID1,ID2 是我在程序里面定义规则实现的 在插入数据的时候程序自动给分配ID , 现在想实现同时插入

追答

那你就分配嘛,只要是在一个事务中提交不管你是插入几个表不都是同时么。
1、插入A表并返回A表当前ID
v_id1 number(20);
insert into a (ID1,name,sex)values(你自定义的ID1,name_value,sex_value) return ID1 into v_id1;
2、插入B表
insert into b (ID2,ID1,Fraction)values(你自定义的ID2,你自定义的ID1,franction_value);
3、事务提交
commit;
注意这里只有一个commit;表示前边二个插入在同一事务中处理。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-01
我觉得你应该是先前学了sql server才又这样的理解。
与sql server 不同,在oracle中不存在自动增长的字段,但是oracle有一个叫做sequence的数据库对象,它可以实现自动增长功能。你可以先前创建一个或两个sequence,当做插入操作时取sequence的值就可以了,因为两个表是主从关系,因此插入时应先插入主表再附表。
insert into a values(id1_s.next_value,name_value,sex_value);
insert into b values(id2_s.next_value,a.id1,franction_value);
commit;追问

我说错了 俩张表的ID是自己编写的编码规则让其增长的 数据都是从页面取来的 我开始也着样写了 但是不行啊!

第2个回答  2011-09-01
delete from A002;
commit ;
delete from A001;
commit;

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网