Ошибка в 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 шт):
В 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;