Ошибка в Oracle SQL Developer: PLS-00428: в этом предложении SELECT ожидается фраза INTO

Имеется sql-запрос:

SELECT 
  SUBSTR(t.xmldata, INSTR(t.xmldata,'<TerminalId>')+12, INSTR(t.xmldata,'</TerminalId>')-INSTR(t.xmldata,'<TerminalId>')-12) TerminalId
FROM TERMINALPRESET t;

В случае, если запускать данный запрос в Oracle SQL Developer вручную - результат успешный, формируется табличка с запрашиваемыми данными, но в случае, если создать Job - при его срабатывании в логах имеется следующая ошибка:

"ORA-06550: Строка 1, столбец 757:
PLS-00428: в этом предложении SELECT ожидается фраза INTO
"

Имеется-ли вариант решения данной ситуации?


Ответы (1 шт):

Автор решения: RSK

В oracle можно писать как просто sql запросы вида select * from table, так и pl/sql код. В pl/sql нельзя использовать просто select, потому что данные никуда не вывести, поэтому используется конструкция

select name
into l_name_user
from users;

и дальше уже работать с этой переменной l_name_user

в переменную может записываться только одно значение. Если нам нужно пройти по всем данным из таблицы, тогда в объявлении объявим курсор

Declare
 CURSOR cur IS 
    SELECT id, name, age, address 
    FROM users
    WHERE deleted = 0;
 l_acc_id number;
begin
 --цикл из курсора
 for res in cur
   loop
     begin 
       select au.acc_id
       into l_acc_id
       from acc2users au
       where au.user_id = res.id
       and rownum = 1; --если записей с одним id может быть несколько,костыльное решение, но ошибки не будет
     exception 
       WHEN NO_DATA_FOUND THEN
         l_acc_id := NULL;
     end;
 --что то делаем с переменной
   ....
end;

→ Ссылка