Проблема только в or
;это должно быть and
:
if lower(l_value) NOT LIKE 'http://%' and lower(l_value) NOT LIKE 'https://%' then
l_value := l_baseURL || l_value;
end if;
Одно и то же значение не может соответствовать обоим условиям одновременно, поэтому, если оно совпадает с одним, оно все равно не будет соответствовать другому;так что ваш исходный or
всегда будет истинным для любого значения.
Вы можете получить тот же эффект, используя LIKE
и затем отрицая все условие or
:
if NOT (lower(l_value) LIKE 'http://%' or lower(l_value) LIKE 'https://%') then
l_value := l_baseURL || l_value;
end if;
но я не думаю, что это на самом деле яснее.