表一: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 如何得到??

解决方案 »

  1.   

    通常的做法是获取CARLIST_SEQ.nextval到一个临时变量,然后再插入cardlist和cardlist2表中的id。如果LZ实在不想修改源代码或者其它原因,也可以试着从all_sequences表中读取last_number列的值,不过需要在用户权限上有些要求。
      

  2.   


    这个是 PL/SQL 吧? 
    本人是 纯写java,完全没有写过 存储过程,帮忙指引一下 谢谢
      

  3.   

    java更好处理啦,执行一个select CARLIST_SEQ.nextval from dual取值到java变量不就行了。
      

  4.   

    前面提供的是一种思路,跟所选择的语言无关。
    PL/SQL、支持JDBC/ODBC、支持数据库API的任意一种语言都是可以处理的。
      

  5.   

    这里有详细说明,我没有试过,http://www.51testing.com/html/38/n-815238.html。
      

  6.   


    有你这一句就问题就解决了 ,
    但我还想看看如果 是用 PL/SQL 来处理的话 是如何的? 方便写个demo 来看看么?
      

  7.   


    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;
      

  8.   


    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;
      

  9.   

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

  10.   

    CREATE TABLE CarList(id VARCHAR(10),carname VARCHAR2(30));
    CREATE TABLE carlist2(id2 VARCHAR(10),carlist_id VARCHAR(10),name2 VARCHAR2(30));CREATE SEQUENCE s_carlist 
    INCREMENT BY 1 
    START WITH 1
    MINVALUE 1
    NOMAXVALUE ;CREATE OR REPLACE TRIGGER xcarlist 
    AFTER INSERT ON CarList FOR EACH ROW 
    BEGIN 
      INSERT INTO carlist2 VALUES (:NEW.id,:NEW.id,:NEW.carname);
    END;SELECT s_carlist.NEXTVAL FROM dual;
    SELECT s_carlist.CURRVAL FROM dual;INSERT INTO carlist VALUES (s_carlist.NEXTVAL,'CAR ONE');
    SELECT * FROM carlist;
    ID CARNAME
    2 CAR ONESELECT * FROM carlist2;
    ID2 CARLIST_ID NAME2
    2 2 CAR ONE