2014-02-26 63 views
0

您好我想從一個CSV文件
數據導入使用導入使用蟾蜍數據時爲Oracle

我創建了相應的欄目「蟾蜍爲甲骨文」我的Oracle數據庫如何創建序列,
但想創建一個主鍵序列
與我的數據

你如何創建導入的數據序列對應?

+1

您可以在DB中創建一個'SEQUENCE',然後參考插入數據的SEQUENCE.NEXTVAL。 – Incognito

回答

2

一種可能的方法是使用序列與觸發器:

create sequence seq_my_pk; 

create table my_table (pk number not null primary key, value varchar2(30)); 

create or replace trigger tr_my_table_pk 
    before insert on my_table 
    for each row 
begin 
    if :new.pk is null then 
    :new.pk := seq_my_pk.nextval; 
    end if; 
end; 

這將設置在插入的PK,如果它不是在INSERT語句中提供。

如果您已經在12c上,則可以使用新的GENERATED AS IDENTITY功能。

+0

'Trigger'很好。但是當數據量很大時,'Sequence'會更好嗎? –

+1

@OracleUser對於大量的數據/重複導入,我會使用單獨的臨時表,其中每個列都被定義爲VARCHAR2(4000)。然後,我會將csv數據導入該登臺表並使用INSERT ... SELECT將其傳輸到目標表,並在必要時包括TO_NUMBER()/ TO_DATE()轉換。這使調試錯誤的輸入數據變得更容易,因爲您可以對臨時表運行即席查詢。是的,在這種情況下,將序列包含在INSERT語句中而不是使用觸發器會更有意義。 –