Вставка и возвращаемое значение в oracle

#sql #oracle #plsql

#sql #Oracle #plsql

Вопрос:

Мне нужно вставить и вернуть первичный ключ в одном запросе, возможно ли это? причина в том, что первичный ключ является автоинкрементным, поэтому я не знаю, что это такое.

 insert into Person(name) values ('Radouane')
  

Выберите PersonID: текущий идентификатор, который я вставил.

Спасибо,

Комментарии:

1. Как первичный ключ получает идентификатор? используя sequence или с помощью identity ?

Ответ №1:

RETURNING INTO Предложение — это то, что вам нужно:

 SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  l_id person.PersonId%type;
BEGIN
  INSERT INTO person ( name ) VALUES ( 'Radouane' ) 
    RETURNING id INTO l_id;
  DBMS_OUTPUT.PUT_LINE( 'Returning ID value is : '||l_id );
END;
/
  

Замените «id» на столбец вашего первичного ключа, а «l_id» — на переменную, в которую вы хотите поместить значение.

В Интернете доступно множество примеров. Обратите внимание, что это ограничено PL / SQL, его нельзя использовать в SQL.

Комментарии:

1. я получил 00905. 00000 — «отсутствующее ключевое слово»

2. Вы должны добавить, что это возможно только в PL / SQL, а не в SQL

3. да, я использую oracle, но я все еще получаю ту же ошибку «отсутствует ключевое слово»

4. @user2848242 pl / sql — это процедурный язык в oracle (функции, триггеры, процедуры, анонимные блоки), sql — это язык запросов. Вы не можете вставить и запросить в одном операторе sql в Oracle, но вы можете вставить и и использовать это значение для другой операции в рамках той же транзакции в pl / sql — для этого и предназначен возврат into.

Ответ №2:

Вы можете попробовать этот пример:

 DECLARE
   strlen   NUMBER;
BEGIN
   INSERT INTO myemp(ename) values('emp-name')
   RETURNING LENGTH(ename) INTO strlen;
   DBMS_OUTPUT.PUT_LINE(strlen);
END;
/