Прежде всего, удалите «rownum < = 1». Если вам действительно нужно, попробуйте следующее:
select value
into word
from (select b.value
from a
left join b on a.value = b.id
where a.id = 2)
where rownum <= 1;
Чтобы лучше понять, что происходит, попробуйте выполнить следующее:
with a as (select 1 id, 1 value from dual union all
select 2, 2 from dual union all
select 3, 1 from dual),
b as (select 1 id, 'Hello' value from dual union all
select 2, 'Bye' from dual)
select a.id aid, a.value avalue, b.id bid, b.value bvalue, rownum
from a left join b on a.value = b.id;
это:
with a as (select 1 id, 1 value from dual union all
select 2, 2 from dual union all
select 3, 1 from dual),
b as (select 1 id, 'Hello' value from dual union all
select 2, 'Bye' from dual)
select a.id aid, a.value avalue, b.id bid, b.value bvalue, rownum
from a left join b on a.value = b.id
where a.id = 2;
это:
with a as (select 1 id, 1 value from dual union all
select 2, 2 from dual union all
select 3, 1 from dual),
b as (select 1 id, 'Hello' value from dual union all
select 2, 'Bye' from dual)
select a.id aid, a.value avalue, b.id bid, b.value bvalue, rownum
from a left join b on a.value = b.id
where rownum = 1;
и это:
with a as (select 1 id, 1 value from dual union all
select 2, 2 from dual union all
select 3, 1 from dual),
b as (select 1 id, 'Hello' value from dual union all
select 2, 'Bye' from dual)
select a.id aid, a.value avalue, b.id bid, b.value bvalue, rownum
from a left join b on a.value = b.id
where a.id = 2 and rownum = 1;
И сравнить результаты. Ваша проблема заключается не в различии между SQL и PL/SQL, а в поведении rownum.
. rownum, если запрос возвращает только один результат? – Aramillo
От того, что вы нам показываете, это кажется невозможным. Это одна и та же база данных? Нет других записей в таблицах? –
Aramillo: Да, rownum не нужен. Без rownum он возвращает больше одного значения, что приводит к исключению. Поэтому я добавил rownum, чтобы получить хотя бы неправильный результат. – Lopo