0
我有以下我们用它来的数据插入表中的存储过程:获取最后插入的行的ID,并用它插入到另一个表中的存储过程
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语句之前和之后尝试过,但是那给了另一个错误。
任何想法如何做到这一点?
感谢
除非你有竞争条件,为什么不从序列中获取最后一个Id。 Sequence.CURRVAL如果我没有错。无论是该表还是获取表中最大的Id(自动递增,因此最大=最后一个Id被插入)。 – Sam
@Sam:currval总是安全的,不会受到竞争条件的影响 - 它会返回该会话中最近由nextval返回的相同值。 –