存储过程在插入后返回主键?

时间:2010-07-23 06:18:22

标签: sql stored-procedures db2 ibm-midrange

我希望存储过程在执行后返回新记录的主键。我认为它将在程序中由OUT参数返回。但是如何选择新插入的行ID呢?我不想使用select MAX(row_id),因为它是一个多用户环境。 任何程序样本都将受到赞赏。

我的平台是ISeries DB2 V5 R4。感谢。

修改

行id列不是标识列。它使用键的序列,在插入表之前通过触发器生成。

修改

这是我想要做的事情

Begin Stored procedure
   Insert into Employees;
   (row id gets automatically generated by trigger) 
Return row id ;

我想避免选择返回的行ID。

4 个答案:

答案 0 :(得分:2)

只需将out参数设置为包含PK的列。

CREATE PROCEDURE DB2TBL.DO_STUFF (IN Param1 INT, IN Param2 CHAR(32),OUT Param3 INT) 
/* Param1 is primary key */
LANGUAGE SQL
P1: BEGIN
DECLARE OUTPARAM INT;
/* Do the stored procedure */
SET OUTPARAM = Param1; 

答案 1 :(得分:2)

答案 2 :(得分:2)

CREATE PROCEDURE ASF_InsertNewAuthorRequest 
(IN @REQUESTTYPE CHAR(1), IN @UserID VARCHAR(18), IN @DATECREATED TIMESTAMP,  IN @REQUESTSTATUS CHAR(1))
    LANGUAGE SQL
    DYNAMIC RESULT SETS 1
P1: BEGIN

    DECLARE cursor1 CURSOR WITH RETURN for
    SELECT IDENTITY_VAL_LOCAL FROM SYSIBM.SYSDUMMY1;


    INSERT INTO AFS_REQUEST 
        ( REQUESTTYPE, "UserID", DATECREATED, REQUESTSTATUS ) 
    VALUES 
        ( @REQUESTTYPE, @UserID, @DATECREATED, @REQUESTSTATUS );

    OPEN cursor1;

END P1

答案 3 :(得分:1)

INSERT INTO [User] (columns)
OUTPUT inserted.userId   
VALUES (@values)

这将返回新创建的userId列值...非常简单。