获取最后插入的行的ID,并使用它插入存储过程中的另一个表

时间:2013-07-31 11:08:47

标签: sql plsql oracle10g

我有以下用于将数据插入表中的存储过程:

CREATE OR REPLACE PROCEDURE mySproc
(
 invoiceId IN NUMBER
 customerId IN NUMBER
)
IS
BEGIN 
    INSERT INTO myTable (INVOICE_ID) 
    VALUES (invoiceId);
END mySproc;
/

我想要做的是获取最后插入的ID(这是myTable上的主键字段并使用序列自动递增)并将其插入另一个表中,我尝试了以下但无法使其工作:

CREATE OR REPLACE PROCEDURE mySproc
(
 invoiceId IN NUMBER
 customerId IN NUMBER
)
IS
BEGIN 
    INSERT INTO myTable (INVOICE_ID) 
    VALUES (invoiceId)

    returning id into v_id;

    INSERT INTO anotherTable (ID, customerID) 
    VALUES (v_id, customerId);  
END mySproc;
/

我收到此错误: [错误] PLS-00049(59:26):PLS-00049:错误的绑定变量'V_ID'我想我需要在某处声明v_id但我之前尝试过并且在BEGIN声明之后但又发出了另一个错误。

关于如何做到这一点的任何想法?

由于

1 个答案:

答案 0 :(得分:5)

将您的程序更改为

CREATE OR REPLACE PROCEDURE mySproc
(
 invoiceId IN NUMBER,  -- Added comma
 customerId IN NUMBER
)
IS
    v_id  NUMBER;  -- ADDED
BEGIN 
    INSERT INTO myTable (INVOICE_ID) 
    VALUES (invoiceId)
    returning id into v_id;

    INSERT INTO anotherTable (ID, customerID) 
    VALUES (v_id, customerId);  
END mySproc;

分享并享受。