日期:2014-05-17  浏览次数:20766 次

oracle 一对一同时插入问题
表一:CarList 
INSERT INTO "CarList" (
  id ,
 carname)
VALUES (
  CARLIST_SEQ.nextval ,
  '车1');

表二:
carlist2:
id2 , carlist_id ,name2

一对一对应关系
CarList.id 对应 carlist2.carlist_id


当插入 表一:CarList 的时候, 要同时插入 表二:carlist2

我们是用 SEQ 来做主键, 请问在插入表二的时候 carlist2.carlist_id 如何得到??

------解决方案--------------------
通常的做法是获取CARLIST_SEQ.nextval到一个临时变量,然后再插入cardlist和cardlist2表中的id。

如果LZ实在不想修改源代码或者其它原因,也可以试着从all_sequences表中读取last_number列的值,不过需要在用户权限上有些要求。
------解决方案--------------------
java更好处理啦,执行一个select CARLIST_SEQ.nextval from dual取值到java变量不就行了。
------解决方案--------------------
前面提供的是一种思路,跟所选择的语言无关。
PL/SQL、支持JDBC/ODBC、支持数据库API的任意一种语言都是可以处理的。
------解决方案--------------------
这里有详细说明,我没有试过,http://www.51testing.com/html/38/n-815238.html。
------解决方案--------------------
SQL code

declare
   v_id number;
begin
   select CARLIST_SEQ.nextval into v_id from dual;
   insert into carlist (id ,carname) values (v_id,'车1');
   insert into carlist2 (carlist_id ,name2) values (v_id,'车2');
end;

------解决方案--------------------
SQL code

create or replace procedure proc_insertcarlist(carname1 varchar2, carname2 varchar2)
is
v_id number;
begin
   select CARLIST_SEQ.nextval into v_id from dual;
   insert into carlist (id ,carname) values (v_id,carname1);
   insert into carlist2 (carlist_id ,name2) values (v_id,carname12);
end proc_insertcarlist;

------解决方案--------------------
直接寫觸發器作用在CarList表,insert CarList表時同步insert到carlist2表。
------解决方案--------------------
探讨

引用:

直接寫觸發器作用在CarList表,insert CarList表時同步insert到carlist2表。

触发器是如何的,请教:?