ORACLE SQL:从另一行插入另一个ID

时间:2015-02-07 16:28:31

标签: sql oracle

我在ORACLE数据库中编写了一系列SQL语句。在我的数据库中,我有2个表(书籍,出版商)。

以下是表格结构

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

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

如果我先插入发布商表

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

如何检索发布者的ID并将其输入书表?

我通常使用存储过程(SQL Server)执行此操作或在应用程序中执行此操作。

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

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

只需使用select语句:

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

将bk_id,title和publisher_name替换为您想要的相应数据。

答案 2 :(得分: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变量。