Oracle引用主键

时间:2013-05-02 02:40:04

标签: sql oracle foreign-keys primary-key

父级的主键从序列customerNo = customerSeq.nextval获取其值。如何将该值作为外键插入子表?

  

插入帐户值(accountSeq.nextval,'500',customerSeq.nextval,'S','O');

不起作用并给我错误。

2 个答案:

答案 0 :(得分:1)

您可以使用currval获取上次生成的值。

insert into account 
  (account_id, some_col, customer_id, col3, col4)
values 
  (accountSeq.nextval,'500',customerSeq.currval,'S','O'); 

在插入表中明确列出表的列是一种很好的编码风格。您也没有显示您的表定义,但不使用字符串文字来表示数字'500'是一个字符串,500是一个数字。

手册中有更多详细信息:http://docs.oracle.com/cd/E11882_01/server.112/e26088/pseudocolumns002.htm#i1009336

答案 1 :(得分:0)

将记录插入带有序列的表时,可以使用“returns”子句检索PL / SQL变量中使用的值,然后将其用于子记录。

insert into
  my_table (
    id,
    col1,
    ...)
  values (
    my_table_seq.nextval,
    'A',
    ...)
  returning id
  into      my_package.my_table_id;

insert into
   child_table (
     id,
     my_table_id,
     ...)
   values (
     child_table_seq.nextval,
     my_package.my_table_id,
     'B',
     ...)