Я хочу использовать функцию декодирования в курсоре с именами псевдонимов, чтобы избежать неоднозначности столбца, поэтому я использовал ниже подход.Декодировать с псевдонимом в курсоре
У меня есть код, такие как:
declare
cl number;
cursor c is
select c1.rowid,c1.col1,
DECODE(c1.col2, 'XYZ', c1.col3, 10) cl
from table1 d,table2 c1 where c1.process_id=13525 and d.col3(+)=cl;
begin
for rec in c
loop
dbms_output.put_line(NVL(rec.cl,'-1'));
end loop;
end;
В этом годе, когда я буду срабатывать запрос, удалив состояние «и d.col3 (+) = сл» он будет получать мне данные со значением «п . Но когда я назначаю это условие, он не будет извлекать данные и не входить в цикл курсора. У меня есть соответствующие данные в d.col3.
Предположим, что если я получу cl как 5, то он также присутствует в d.col3, тогда он должен дать мне данные, я сделал это, потому что мне нужно удалить повторяющиеся записи. Поскольку с этим единственным условием я получу дубликаты записей. col3 in d table - это первичный ключ.
Так что я не понимаю, почему он не будет входить в цикл, поскольку он получает значение от запроса.
Нет сообщений об ошибке. Он не входит в цикл, потому что он не извлекает никаких данных. – SNC
Возможный дубликат [Использование псевдонима в предложении WHERE] (http://stackoverflow.com/questions/356675/using-an-alias-in-a-where-clause) –