ВЫБЕРИТЕ IDENT_CURRENT («имя таблицы») в Oracle - PullRequest
2 голосов
/ 07 сентября 2010

Я новичок в PL / SQL и мне нужен последний вставленный идентификатор в таблицу данных после оператора вставки.

Как в MS SQL SELECT IDENT_CURRENT («имя таблицы»)

Ответы [ 3 ]

8 голосов
/ 07 сентября 2010

Вы можете использовать предложение RETURNING:

insert into mytable(x,y) values (1,2) returning id into v_id;

Это хорошо работает, когда есть триггер, который заполняет столбец идентификатора, поэтому вам не нужна вещь "select seq.currval from dual".

4 голосов
/ 07 сентября 2010

В Oracle нет встроенных полей автоинкремента, вы создаете его с помощью последовательностей:

CREATE TABLE some_tab(
      rec_id      INTEGER,
      some_data   VARCHAR2(300)
);

CREATE SEQUENCE some_tab_seq;

CREATE OR REPLACE TRIGGER trig_BI
   BEFORE INSERT
   ON some_tab
   FOR EACH ROW
BEGIN
   IF :NEW.rec_id IS NULL
   THEN
      :NEW.rec_id := some_tab_seq.NEXTVAL ;
   END IF;
END;

Затем в PL / SQL вы можете получить текущее значение последовательности по

your_var := some_tab_seq.CURRVAL

Также в более старой версии Oracle вы не можете напрямую читать NEXTVAL / CURRVAL в var и должны сделать:

SELECT some_tab_seq.CURRVAL
  INTO your_var
  FROM DUAL;
2 голосов
/ 07 сентября 2010

Oracle не реализует столбцы идентификаторов. Он использует последовательности, которые генерируют уникальные числа, которые можно использовать в качестве значений PK в любой таблице.

Таким образом, выражение IDENT_CURRENT ('my_table') лучше всего переводить в MySequence.CURRVAL последовательности, питающей PK таблицы.

Обычно вы извлекаете вставленное значение PK в MS SQL следующим образом:

INSERT INTO MyTable ...
SELECT @PK = SCOPE_IDENTITY()

В Oracle используйте предложение INSERT RETURNING для достижения аналогичной функциональности

DECLARE PK ...;
INSERT INTO MyTable
RETURNING TableID INTO PK;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...