iSeries DB2 - Является там каким-либо способом выбрать значение идентификационных данных из оператора вставки?

2 ответа

Вам необходимо использовать скалярную функцию IDENTITY_VAL_LOCAL . Из документации IBM :

IDENTITY_VAL_LOCAL - это недетерминированная функция, которая возвращает последний назначенный значение для столбца идентификаторов.

Пример:

CREATE TABLE EMPLOYEE
    (EMPNO INTEGER GENERATED ALWAYS AS IDENTITY,
     NAME CHAR(30),
     SALARY DECIMAL(5,2),
     DEPT SMALLINT)

INSERT INTO EMPLOYEE
    (NAME, SALARY, DEPTNO)
    VALUES('Rupert', 989.99, 50)

SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1
7
ответ дан 30 November 2019 в 13:40
поделиться

Я не уверен в iSeries, но с db2v8.1 работало следующее:

Считайте, что «ID» - это имя столбца вашей идентификации. Следующий stmt вернет только что сгенерированный идентификатор (тот же, что вставлен с помощью insert stmt):

SELECT ID FROM FINAL TABLE (
    INSERT INTO AwesomeTable (column1, column2, etc.)
            VALUES (value1, value2, etc.)    
    )

Некоторое объяснение, которое я нашел на сайте publib: (я использовал его для справки, чтобы проверить свой запрос выше)

     /* The following SELECT statement references an INSERT statement in its
           FROM clause.  It inserts an employee record from host variables into
           table company_b.  The current employee ID from the cursor is selected
           into the host variable new_id.  The keywords FROM FINAL TABLE
           determine that the value in new_id is the value of ID after the
           INSERT statement is complete.

           Note that the ID column in table company_b is generated and without
           the SELECT statement an additional query would have to be made in
           order to retreive the employee's ID number.
        */
        EXEC SQL SELECT ID INTO :new_id
                 FROM FINAL TABLE(INSERT INTO company_b
                 VALUES(default, :name, :department, :job, :years, :salary, 
                        :benefits, :id));

Надеюсь, это поможет :)

14
ответ дан 30 November 2019 в 13:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: