2013-04-12 5 views
1

У меня есть одна таблица с именем INTER, и я хочу передать некоторые данные из INTER в FINAL (новая таблица, которая уже создана и пуста) с помощью процедуры.Использование последовательностей в качестве первичного ключа

Я должен использовать последовательность в качестве первичного ключа для таблицы FINAL. INTER является родительской таблицей и содержит все столбцы в FINAL.

Я создал последовательность M_SQ. Вот то, что я пробовал:

create or replace 
PROCEDURE STAGING_TO_CUSTOMER 
    AS 
    BEGIN 
     INSERT INTO FINAL (C_ID,C_NAME,C_PHONE,C_ADDRESS) 
     SELECT M_SQ.NEXTVAL,C_NAME,C_PHONE,C_ADDRESS FROM INTER; 
     COMMIT; 
     EXCEPTION 
     WHEN OTHERS THEN 
     ROLLBACK; 
    END; 

Эта процедура компилируется, но никаких записей не передаются FINAL.

Может ли кто-нибудь помочь? Я использую sqldeveloper 11g.

+0

избавиться от «ИСКЛЮЧЕНИЯ КОГДА ДРУГИЕ». это просто служит для маскировки любых ошибок. После удаления повторите процедуру. вы можете увидеть сообщение об ошибке. – DazzaL

ответ

0

вы на самом деле должны запустить процедуру для того, чтобы делать то, что находится внутри него:

BEGIN 
    STAGING_TO_CUSTOMER; 
END; 

Кроме того, ваша процедура может так выглядеть:

CREATE OR REPLACE PROCEDURE STAGING_TO_CUSTOMER AS 
BEGIN 
    INSERT INTO FINAL (C_ID,C_NAME,C_PHONE,C_ADDRESS) 
    SELECT M_SQ.NEXTVAL,C_NAME,C_PHONE,C_ADDRESS FROM INTER; 
    COMMIT; 
    EXCEPTION 
    WHEN OTHERS THEN 
     ROLLBACK; 
     RAISE; 
END; 

Таким образом, вы знаете, если что-то случится.

+0

Я знаю .. Я попробовал выполнить процедуру. Как я уже сказал, процедура компилируется и выполняется успешно, но; когда я проверяю таблицу FINAL, она по-прежнему пуста –

+0

У меня возникла следующая ошибка: - Сообщение об ошибке: ORA-01722: недопустимый номер ORA-06512: на странице «SYSTEM.STAGING_TO_CUSTOMER», строка 11 ORA-06512: на линии 2 01722. 00000 - «недопустимый номер» * Причина: * Действие: Что это значит? –

+0

oh, есть ли столбец типа NUMBER в таблице FINAL? (кроме столбца id) – Sebas

0

Вам не нужно хранимая процедура - вы можете просто запустить команду как:

INSERT INTO FINAL (C_ID,C_NAME,C_PHONE,C_ADDRESS) SELECT M_SQ.NEXTVAL,C_NAME,C_PHONE,C_ADDRESS FROM INTER; 
COMMIT; 
+0

Я знаю, что могу запустить команду, но ее часть требования и, следовательно, я должен использовать процедуру. Он компилируется и работает успешно, когда я его называю. Однако таблица FINAL по-прежнему пуста. –

Смежные вопросы