其他 select 查询中的游标值
cursor value in other select query
create or replace PROCEDURE "RESULT" (res1 OUT SYS_REFCURSOR )
IS
Cursor c is Select distinct id,fname,lname,dob,gender,address1 from emp where name like '%B%'
d c%rowtype;
BEGIN
OPEN c;
LOOP
fetch c into d;
exit when c%notfound;
OPEN res1 FOR select e.id from emp e where e.poi_user_id IN (d.id);
End Loop;
END;
已编译程序结果。
如果我 运行 查询没有过程我得到 5 个结果但是当我使用上面的代码时,它只有 returns 最后一个结果。
SET SERVEROUTPUT ON;
Declare
c SYS_REFCURSOR;
id number;
begin
RESULT(c);
loop
fetch c into id; -- and other columns if needed
exit when c%notfound;
dbms_output.put_line(id);
end loop;
END;
结果 5
您不应该让自己难以理解编码。在这种情况下,您不需要任何循环,带有 FILTER 条件的简单 SELECT 就足以满足您的要求。希望下面的查询有所帮助。对于用户“”的命名约定,这也不是一个好的编码习惯。
就您的问题而言,REFCURSOR 并不是很智能,无法保留每次迭代的所有记录并向您打印协作输出。
CREATE OR REPLACE PROCEDURE "RESULT"(
res1 OUT SYS_REFCURSOR )
IS
BEGIN
OPEN res1 FOR
SELECT e.id FROM emp e
WHERE EXISTS
( SELECT 1
FROM emp E1
WHERE e1.name LIKE '%B%'
AND e1.poi_user_id = e.id
);
END;
create or replace PROCEDURE "RESULT" (res1 OUT SYS_REFCURSOR )
IS
Cursor c is Select distinct id,fname,lname,dob,gender,address1 from emp where name like '%B%'
d c%rowtype;
BEGIN
OPEN c;
LOOP
fetch c into d;
exit when c%notfound;
OPEN res1 FOR select e.id from emp e where e.poi_user_id IN (d.id);
End Loop;
END;
已编译程序结果。
如果我 运行 查询没有过程我得到 5 个结果但是当我使用上面的代码时,它只有 returns 最后一个结果。
SET SERVEROUTPUT ON;
Declare
c SYS_REFCURSOR;
id number;
begin
RESULT(c);
loop
fetch c into id; -- and other columns if needed
exit when c%notfound;
dbms_output.put_line(id);
end loop;
END;
结果 5
您不应该让自己难以理解编码。在这种情况下,您不需要任何循环,带有 FILTER 条件的简单 SELECT 就足以满足您的要求。希望下面的查询有所帮助。对于用户“”的命名约定,这也不是一个好的编码习惯。
就您的问题而言,REFCURSOR 并不是很智能,无法保留每次迭代的所有记录并向您打印协作输出。
CREATE OR REPLACE PROCEDURE "RESULT"(
res1 OUT SYS_REFCURSOR )
IS
BEGIN
OPEN res1 FOR
SELECT e.id FROM emp e
WHERE EXISTS
( SELECT 1
FROM emp E1
WHERE e1.name LIKE '%B%'
AND e1.poi_user_id = e.id
);
END;