Это потому, что вы используете это значение purun_kod во внутреннем соединении:
...
join (select regexp_substr(v_urun_kod, '[^,]+', 1, level) urun_kod
from dual
connect by level <= regexp_count(v_urun_kod, ',') + 1
) x on p.urun_kod = x.urun_kod
...
Если вы не укажете значение, ваше внутреннее объединение завершится неудачей.
ОБНОВЛЕНИЕ1
Попробуйте изменить это объединение на следующее:
...
join (select regexp_substr(v_urun_kod, '[^,]+', 1, level) urun_kod
from dual
connect by level <= regexp_count(v_urun_kod, ',') + 1
) x on p.urun_kod = nvl(x.urun_kod,p.urun_kod)
...
Я поставил NVL, так что если столбец X.URUN_KOD равен нулю, ничего не происходит.