2013-05-02 2 views
0

Первичный ключ родителя получил свое значение из последовательности customerNo = customerSeq.nextval. Как вставить это значение в дочернюю таблицу в качестве внешнего ключа?Oracle Referary Primary Key

Вставить в учетные данные (accountSeq.nextval, '500', customerSeq.nextval, 'S', 'O');

не работает и дайте мне ошибку.

ответ

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

0

При вставке записи в таблицу с последовательностью, вы используете «возвращающегося» положение, чтобы получить значение, используемое в переменную 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', 
    ...)