2013-02-12 278 views
0

我需要在臨時表中批量插入一些行並稍後刪除它們。我需要一個可以明確識別和刪除在單個事務中插入的行的唯一ID。我如何實現這一目標?在Oracle中生成唯一的批次ID

在此先感謝

我希望把使用批量插入一個臨時表中的幾行,用它做一些加盟等與數據庫其他表,並完成後刪除這些行。所以一旦數據被使用,我應該可以刪除它們。可能有很多用戶同時使用這個臨時表,因此我需要一些唯一的ID來指定插入到單個插入中的行,以便可以使用簡單的刪除語句刪除它們而不刪除其他用戶當時輸入的行 從表中刪除='xxx'

+0

你有臨時表的結構,你到哪兒去給插入行? – Incognito 2013-02-12 07:04:11

+0

創建一個序列,然後在插入過程中使用'seq_name.nextval'。 – 2013-02-12 07:23:31

+0

@a_horse_with_no_name如果我正確理解OP,他希望對於在單個事務中插入的所有行都具有*相同的批處理標識(類似於ETL過程的裝入標識)。 – 2013-02-12 07:41:13

回答

2

通常的方法是使用一個序列預先生成您的批次ID,然後提供該批次ID您的INSERT語句:

create sequence seq_batchid; 

declare 
    l_BatchID number; 
begin 
    /* if you're using release 10 or earlier, use 
    select seq_batchid.nextval into BatchID from dual; 
    instead */ 
    l_BatchID := seq_batchid.nextval; 

    INSERT INTO temp_table(BatchID, ...) (SELECT l_BatchID, ...) 
end; 
0

Oracle序列可能有效。但要確認這一點,您需要向我們提供更多關於您想要實現的信息。如果你也可以給我們桌子的結構,那會很好。

+0

編輯的問題 – 2013-02-12 10:10:59