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