#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;
/