2015-02-07 25 views
0

我已經在ORACLE數據庫中編寫了一系列SQL語句。在我的數據庫中,我有2個表格(書籍,出版商)。ORACLE SQL:從另一行插入另一個ID

下面是表結構

BOOK 
---------- 
bk_id | title | pub_id 

PUBLISHER 
---------- 
pub_id | pub_name 

如果我插入發佈表第一

INSERT INTO PUBLISHER (pub_name) VALUE ('ABC Publisher'); 

如何檢索發佈者的ID,並進入書表?

我通常使用存儲過程(SQL Server)執行此操作,或者在應用程序中執行此操作。

如何在SQL中的ORACLE中執行此操作?

回答

0

從PL/SQL,你可能想使用RETURNING INTO條款找回新插入的ID:

DECLARE 
    my_id int; 
BEGIN 
    INSERT INTO PUBLISHER (pub_name) VALUE ('ABC Publisher') 
     RETURNING id INTO my_id; 
    ... 
END; 

其中my_id相應聲明你的列類型PL/SQL變量。

0

只需使用select語句:

INSERT INTO BOOK VALUES 
(bk_id, title, (SELECT pub_id FROM PUBLISHER WHERE pub_name = publisher_name)) 
… 
; 

更換bk_id,標題和PUBLISHER_NAME你想要的適當的數據。

+0

這可以在程序中完成嗎? – 2015-02-07 16:37:37

+0

我想象,雖然我從來沒有用過這樣的;只要給它所需的參數,讓它代替你。 – 2015-02-07 16:38:41

+0

@PeterSun是的。我在PLSQL腳本和存儲過程中使用過很多次。 – 2015-02-07 16:40:26

1

我認爲最簡單的方法是創建一個Trigger,它將在表格後插入其他table

create or replace trigger tr_ai_publisher 
after insert on publisher 
for each row 
begin 
    --Here you can access the new publisher id using :new.pub_id 
end; 

這樣,您不必處理自己對過程的調用。

但是,如果你真的想,你還可以在ORACLE使用存儲過程,一般的語法是

CREATE [OR REPLACE] PROCEDURE proc_name [list of parameters] 
IS  
    Declaration section 
BEGIN  
    Execution section 
EXCEPTION  
    Exception section 
END; 
+0

爲什麼downvote? – 2015-02-07 16:41:35

+0

我不是downvoter,但使用子查詢,你認爲'pub_name'是(並將永遠是)一個唯一的鍵。這裏沒有特別說明。在一般情況下,這可能是一個相當危險的假設(想想員工的名字:你可能很容易有重複的值) – 2015-02-07 16:49:26

+1

@SylvainLeroux我完全同意,首先閱讀以快速解答問題,請參閱編輯。 – 2015-02-07 16:51:16

相關問題