Я делаю набор из двух столбцов (col & val). Во второй select col является параметром других столбцов, а val — значением этого столбца.
declare
TYPE t_my_list is record(id varchar2(1000), col VARCHAR2(4000),val VARCHAR2(4000));
TYPE list_3STR is table of t_my_list;
v_stmt VARCHAR2(32000) := 'SELECT id, col, val FROM userA.tableA';
v_lstmt VARCHAR2(32000);
v_ret list_3STR := list_3STR();
cDel number;
begin
EXECUTE IMMEDIATE v_stmt BULK COLLECT INTO v_ret;
for i in v_ret.first..v_ret.last loop
v_lstmt := 'SELECT count(*) FROM userB.tableB
WHERE NVL('||v_ret (i).col||', ''<null>'') in ('''||v_ret (i).val||''', ''<null>'') and idB = '''||v_ret (i).id||'''';
EXECUTE IMMEDIATE v_lstmt INTO cDel;
If cDel > 0 Then
--some code
cDel = 0;
end if;
end loop;
end;
Но в моем операторе выбора у меня может быть нуль, поэтому я использую NVL. Кроме того, поскольку у меня может быть число, мне нужно использовать convert to_char('||v_ret (i).col||')
. Кроме того, тип столбца - число, RAW, дата и т. Д.
Мой вопрос:
есть ли другие возможности, кроме NVL?
если нет, есть ли у оракула преобразователь по умолчанию? (все типы должны быть Varchar2)
val
? - person Alex Poole   schedule 03.08.2018