首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >其他选择查询中的游标值

其他选择查询中的游标值
EN

Stack Overflow用户
提问于 2016-05-02 11:50:10
回答 1查看 586关注 0票数 0
代码语言:javascript
运行
复制
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个结果,但是当我使用上面的代码时,它只返回最后一个结果。

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-03 07:52:09

你不应该让你自己很难理解代码。这里不需要任何循环,在这种情况下,一个带有过滤器条件的简单选择就足以满足您的需求。希望下面的查询有帮助。另外,对于用户“命名约定”来说,这也不是一个好的编码实践。

就您的问题而言,REFCURSOR并不聪明,可以保存每次迭代的所有记录并打印协作输出。

代码语言:javascript
运行
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36981732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档