使用序列作为主键

时间:2013-04-12 21:15:55

标签: plsql oracle11g oracle-sqldeveloper plsqldeveloper

我有一个名为INTER的表,我希望使用一个过程将一些数据从INTER传输到FINAL(一个已经创建并且为空的新表)。

我必须使用sequence作为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。

2 个答案:

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

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

所以你知道是否有事情发生。