对此有何帮助? 我想归还所有住在法国的人,然后将他们与居住在BELguim的人比较,如果他们有相同的名字或name_done显示结果
declare
cursor c is select namer from poeple where city = 'France';
c_res c%rowtype;
begin
open c;
loop
fetch c into c_res;
exit when c%notfound;
select * from poeple tw where city = 'BELguim' AND (c_res.namer = tw.namer OR c_res.namer = tw.namer || ' _done' );
end loop;
close c;
end;
答案 0 :(得分:1)
为什么要使用游标?您可以使用一个查询来编写此代码:
select pb.*
from poeple pf join
poeple pb
on pf.city = 'France' and pb.city = 'BELgium' and
(pf.namer = pb.namer or pf.namer = pb.namer || ' _done');
您的代码存在的问题是PL / SQL不允许查询从代码块返回任何内容。您可以打印出结果,将值插入变量,或将它们放在另一个表中。但是,您不能只从查询中获得结果。
答案 1 :(得分:1)
问题在于:
从城市中选择*,其中city =' BELguim' AND(c_res.namer = tw.namer OR c_res.namer = tw.namer || ' _done' );
您无法直接在SQL
中撰写PL/SQL
。 PL / SQL引擎需要INTO
子句。
查看代码,您不需要cursor c
。它可以用单个SQL编写。这让我想起了戈登的问题:
select pb.*
from poeple pf join
poeple pb
on pf.city = 'France' and pb.city = 'BELgium' and
(pf.namer = pb.namer or pf.namer = pb.namer || ' _done');
如果你真的需要PL / SQL来解决一些你没有解释的问题,例如将结果集返回为REF CURSOR,那么OUT
参数为REF CURSOR
。但是,你需要解释这个要求。
如果您可以在SQL中执行某些操作,那么请不要使用PL / SQL。
编辑如果您的最终目标是更新,请在USING
声明中将上述查询用作MERGE
子句。