2013-04-07 50 views
0

我需要在插入查詢檢查重複任何領域像名字,如果不存在在這張表使插入新行並返回當前插入的ID 否則 如果名字存在表回零,不使用觸發器,功能和proced檢查重複值之前插入oracle查詢,而不使用觸發器

+0

你說「回報」,但你然後排除任何編程解決方案。那麼你究竟想要做什麼? – APC 2013-04-07 14:36:53

回答

3

有作爲「插入查詢」沒有這樣的事情重複

實現這樣的要求是與數據完整性約束的正常方式:

alter table your_table 
    add constraint your_table_uk unique (first_name) 
/

,如果你試圖插入重複記錄這將提高任何異常。

獲取當前插入ID:

insert into your_table (id, first_name) 
    values (your_seq.nextval, 'SAM-I-AM') 
    returning id 
/

你說你不想使用函數或過程,但返回0的唯一方式,如果提交first_name是重複的是程序:

create or replace function new_record (p_name your_table.first_name%type) 
    return your_table.id%type 
is 
    return_value your_table.id%type; 
begin 
    begin 
     insert into your_table (id, first_name) 
      values (your_seq.nextval, p_first_name) 
     returning id into return_value; 
    exception 
     when dup_val_on_index then 
      return_value := 0; 
    end; 
    return return_value; 
end; 
+0

如果我想將插入語句作爲參數傳遞給該函數並在函數和返回值中執行它,我該怎麼辦? – 2013-04-08 07:21:47

相關問題