2009-06-03 31 views
2

我見過很多類似的問題&答案,但他們已經使用的其他特定DB-的招數,或者代碼做了,等我正在尋找一個直接的SQL批處理文件解決方案(如果存在)。負載兩個Oracle數據庫相關的表

我有一個父/子關係的兩個表,稱他們運行& Run_Values。
運行有一個「自動」生成的PK,runID(一個頻率爲&的觸發器)和兩個colums,Model_Type &也唯一標識該行的時間(通過約束強制執行)。對於在運行的每一行,還有在Run_Values,其中有兩列,runid爲&價值許多條目。

我想生成,使數據(SQL的組合,我知道存在,SQL,我想它)的過程是這樣的:

insert into Runs (Model_Type, Time) values ('model1', to_date('01-01-2009 14:47:00', 'MM-DD-YYYY HH24:MI:SS')); 
set someVariable = SELECT runId FROM Runs WHERE Model_Type like 'model1' and Time = to_date('01-01-2009 14:47:00', 'MM-DD-YYYY HH24:MI:SS')); 
insert into Run_Values (run_id, Value) values (someVariable, 1.0); 
etc - lots more insert statements with Values for this model run. 

任何想法,引用等受到讚賞。

回答

4

訣竅是使用序列的CURRVAL。即使它設置在數據庫觸發器中,您也可以使用它。

一個例子:

SQL> create table runs 
    2 (runid  number 
    3 , model_type varchar2(6) 
    4 , time  date 
    5 ) 
    6/

Table created. 

SQL> create sequence run_seq start with 1 increment by 1 cache 100 
    2/

Sequence created. 

SQL> create trigger run_bri 
    2 before insert on runs 
    3 for each row 
    4 begin 
    5 select run_seq.nextval 
    6  into :new.runid 
    7  from dual 
    8 ; 
    9 end; 
10/

Trigger created. 

SQL> create table run_values 
    2 (run_id number 
    3 , value number(3,1) 
    4 ) 
    5/

Table created. 

SQL> insert into runs (model_type, time) values ('model1', to_date('01-01-2009 14:47:00', 'mm-dd-yyyy hh24:mi:ss')); 

1 row created. 

SQL> insert into run_values (run_id, value) values (run_seq.currval, 1.0); 

1 row created. 

SQL> insert into run_values (run_id, value) values (run_seq.currval, 2.0); 

1 row created. 

SQL> insert into runs (model_type, time) values ('model2', to_date('01-01-2009 15:47:00', 'mm-dd-yyyy hh24:mi:ss')); 

1 row created. 

SQL> insert into run_values (run_id, value) values (run_seq.currval, 3.0); 

1 row created. 

SQL> insert into run_values (run_id, value) values (run_seq.currval, 4.0); 

1 row created. 

SQL> insert into run_values (run_id, value) values (run_seq.currval, 5.0); 

1 row created. 

SQL> select * from runs 
    2/

    RUNID MODEL_ TIME 
---------- ------ ------------------- 
     1 model1 01-01-2009 14:47:00 
     2 model2 01-01-2009 15:47:00 

2 rows selected. 

SQL> select * from run_values 
    2/

    RUN_ID  VALUE 
---------- ---------- 
     1   1 
     1   2 
     2   3 
     2   4 
     2   5 

5 rows selected. 

問候, 羅布。

+0

謝謝 - 一個問題。如果在當前進程/會話正在插入前一個進程/會話的結果時另一個進程/會話創建新模型,該怎麼辦?僅來自此會話/交易的currval? – Marc 2009-06-03 20:22:40