Oracle 在循环的游标中选择查询

Oracle 在循环的游标中选择查询,oracle,plsql,Oracle,Plsql,Oracle新手,需要有关此过程的帮助,请使用Oracle 11g 样本表数据(表1): 身份证件 数量 通货 10 300 英镑 15 500 英镑 20 100 英镑 看起来您想要为循环使用嵌套的 我建议您将游标用于循环-它们更易于维护,因为您不必声明游标变量(顺便说一句,在您的情况下,它无论如何都不会工作,因为您希望将ID和CURRENCY存储到标量R\u 1变量中),打开游标,请注意退出循环和关闭光标。在游标FOR循环中,Oracle为您完成了所有这些 下面是一个例子: 样本表: SQL

Oracle新手,需要有关此过程的帮助,请使用Oracle 11g

样本表数据(表1):

身份证件 数量 通货 10 300 英镑 15 500 英镑 20 100 英镑
看起来您想要为循环使用嵌套的

我建议您将游标用于循环-它们更易于维护,因为您不必声明游标变量(顺便说一句,在您的情况下,它无论如何都不会工作,因为您希望将
ID
CURRENCY
存储到标量
R\u 1
变量中),打开游标,请注意退出循环和关闭光标。在游标FOR循环中,Oracle为您完成了所有这些

下面是一个例子:

样本表:

SQL> select * from tab1;

        ID     AMOUNT CUR
---------- ---------- ---
        10        300 GBP
        15        500 GBP
        20        100 GBP
程序:

SQL> create or replace procedure myproc as
  2  begin
  3    for cur_id in (select id from tab1) loop
  4      dbms_output.put_line('ID = ' || cur_id.id);
  5      for cur_other in (select amount, currency
  6                        from tab1
  7                        where id = cur_id.id    --> use ID fetched in outer loop
  8                       )
  9      loop
 10        dbms_output.put_line(cur_other.amount ||' - '|| cur_other.currency);
 11      end loop;
 12    end loop;
 13  end;
 14  /

Procedure created.
测试:

SQL> set serveroutput on
SQL> exec myproc;
ID = 10
300 - GBP
ID = 15
500 - GBP
ID = 20
100 - GBP

PL/SQL procedure successfully completed.

SQL>

如何返回参照光标

SQL> create or replace procedure myproc (par_id  in tab1.id%type,
  2                                      par_rc out sys_refcursor) as
  3  begin
  4    for cur_id in (select id
  5                   from tab1
  6                   where id = par_id
  7                  ) loop
  8
  9      open par_rc for select amount, currency
 10                      from tab1
 11                      where id = cur_id.id;
 12    end loop;
 13  end;
 14  /

Procedure created.

SQL> var l_rc refcursor
SQL>
SQL> exec myproc(10, :l_rc);

PL/SQL procedure successfully completed.

SQL> print l_rc

    AMOUNT CUR
---------- ---
       300 GBP

SQL>

哇!这看起来很整洁,让我快速执行。我们还可以将输出结果集指定给SYS_REFCURSOR吗?我只尝试将id存储在scaler变量中,而不是两者都存储。如果没有给出预期的输出,
dbms_output.put_line('ID='| | cur_ID.ID)只打印第一个值,而不是所有的值。我发布的示例向您展示了如何执行此操作。你到底要做什么取决于你自己。因此,请随意修改我发布的代码,以便它显示您想要的任何内容。自refcursor起:当然,可以为其指定输出。由于这是一个过程,它应该有一个OUT参数,其数据类型将是SYS_REFCURSOR。无法对其进行框显,请您帮我输入代码好吗?具体是什么代码?