не совсем до конца понимаю для чего так делают:
Select seq_taskid.nextval into vtaskid from dual;
Insert into listid (taskid,objid)
Select vtaskid, id from myverybigtable where 1=1
А потом вытаскивают данные по vtaskid.
Неужели так действительно быстрее?
Насколько я помню, в Оракле нет синтаксиса с RETURNING. И таким способом ты запоминаешь ИД для того, чтобы как раз прочитать запись потом. Ну, это ИМХО
быстрее по сравнению с чем?
Синтаксис то есть, просто не со всеми драйверами дружит. Т.к. RETURNING это PL/SQL конструкция, а не SQL
По сравнению с обычным select * from myverybigtable where 1=1 Where 1=1 - это динамически собранный sql со множеством джойнов
Разница должна быть минимальна, тут скорее логика для запоминания с каким среди данных работает конкретный таск
Вообще, судя по твоему запросу, данные не вытаскивают по vtaskid, а наоборот, генерируют. Т.е. создают результат в таблице listid для некого vtaskid
только в plsql-анонимном блоке работает
Не, это sql и работает везде
https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/RETURNING-INTO-clause.html#GUID-38F735B9-1100-45AF-AE71-18FB74A899BE
Ммм, похоже забыл... Ща попробую
Обсуждают сегодня