Я устанавливаю переменную связывания в блоке PL / SQL и пытаюсь использовать ее в выражении IN другого запроса.Примерно так:
variable x varchar2(255)
declare
x varchar2(100);
begin
for r in (select id from other_table where abc in ('&val1','&val2','&val3') ) loop
x := x||''''||r.id||''',';
end loop;
--get rid of the trailing ','
x:= substr(x,1,length(x)-1);
select x into :bind_var from dual;
end;
/
print :bind_var;
select *
from some_table
where id in (:bind_var);
И я получаю сообщение об ошибке (ORA-01722: Неверное число) в запросе, который пытается использовать переменную связывания в списке «IN».
оператор print дает '123','345'
, что я и ожидаю.
Можно ли использовать переменную связывания, как это, или я должен попробовать другой подход?
(с использованием Oracle 10g)
Уточнение:
Это что-то вроде примирения.Я хочу запустить
select *
from some_table
where id in (select id from other_table where abc in ('&val1','&val2','&val3'))
до того, как основная часть скрипта (здесь не изображена) удаляет целую кучу записей.Я хочу запустить его снова после этого, чтобы убедиться, что записи в some_table
НЕ были удалены.Однако данные в other_table
ДЕЛАЕТСЯ в результате этого процесса, поэтому я не могу просто обратиться к данным в other_table
, потому что там ничего нет.Мне нужен способ сохранить значения other_table.id
, чтобы потом можно было проверить родительские записи.