我不知道为什么这不起作用。
有两个表:
a) id | value b) id | value
---------- ------------
1 | 1 1 | Hello
2 | 2 2 | Bye
3 | 1
我正在进行包含左连接的查询:
select b.value
from a
left join b on a.value = b.id
where a.id = 2
结果是:'再见'。这是正确的。
但是如果我在包含pl / sql的包中使用相同的语句,则会得到错误的结果:
select b.value into word
from a
left join b on a.value = b.id
where a.id = 2 and rownum <= 1
结果是:word =&#39;你好&#39;这是不正确的。
答案 0 :(得分:1)
在PL / SQL函数中没有ROWNUM
子句会出现异常,而在直接运行查询时只得到一个结果。这清楚地表明您的PL / SQL程序没有使用与您的adhoc查询相同的表格。
请检查:
AUTHID CURRENT_USER
)?如果是,为什么?答案 1 :(得分:0)
首先,删除&#34; rownum&lt; = 1&#34;条件。 如果你真的需要它,试试这个:
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的行为。
答案 2 :(得分:0)
为什么使用绑定值= id?它有点令人不安,没关系。此外,条件之间还有一个rownum“约束”。所以考虑一下,你是说oracle要对值和id进行左连接,并且在条件中你说你只需要第一行,这意味着该set只包含Hello“相关”元素