create or replace procedure GetA
as
begin
Select * from abc;
end;我就是想返回一个记录集。
我知道上面select * from abc 不对。但我找了很多资料,不知道该怎么改。请大哥帮我改成一个正确的。给你100分。我再到梦里去谢你。否则我今天不睡了。谢谢!
as
begin
Select * from abc;
end;我就是想返回一个记录集。
我知道上面select * from abc 不对。但我找了很多资料,不知道该怎么改。请大哥帮我改成一个正确的。给你100分。我再到梦里去谢你。否则我今天不睡了。谢谢!
解决方案 »
- 编译正常而脚本执行不正常的现象
- truncate数据表后,闪存恢复?
- 如何提高Oracle语句的执行效率
- Oracle导出问题...
- 导表的问题
- 怎样去某一个字段的后面的两位。
- 启动数据库问题
- 我的ora8i中有个两个数据库A、B,我在oem中移去了一个A,在磁盘上A的文件没有删除。现在OEM里面只有B库了,我想把
- oracle的安装的问题?
- linux 下输入imp总现不能执行,每一次碰到这样的问题
- ORA-06550: 第 1 行, 第 7 列: PLS-00905: 对象 SYSTEM.GETA 无效 ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored
- 消除重复并汇总
或自己上网搜索一下。
as
begin
for cur in(
Select a,b,c from abc
) loop
dbms_output.put_line(cur.a || cur.b || cur.c);
end loop;
end;
/
给你一个例子
--定义包结构
create or replace package pkg_callreport as
type callreport_cursor is ref cursor;
procedure p_GetCallReport(ani_id varchar2,callreport out callreport_cursor);
end pkg_callreport;
--定义包体
create or replace package body pkg_callreport as
procedure p_GetCallReport(ani_id varchar2,callreport out callreport_cursor) is
begin
open callreport for select a.*,b.CALL_AMOUNT,b.UNIT,
b.rate,b.call_type,b.RERATE_STATUS from callrecord a ,callcharges b
where a.CALL_REC_ID=b.CALL_REC_ID and a.USER_ID=ani_id;
end p_GetCallReport;
end pkg_callreport;
查看ref游标的返回结果:
SQL*PLUS>set serverout on;
SQL*PLUS>variable l_cr refcursor;
SQL*PLUS>exec pkg_callreport(:l_cr);
cursor qhz is select * from abc;
hs number;
sjh abc%rowtype;
begin
select count(*) into hs from abc;
open qhz;
loop
fetch qhz into sjh;
dbms_output.put_line(sjh.列名||sjh.列名);
exit when qhz%rowcount=hs;
end loop;
close qhz;
end;
不知道是不是你想要的显示结果,显示表的所有内容
一、在過程參數中使用一個OUT遊標,然後在過程裡對它進行設置,或者創建一個返回遊標型的函數,當要獲得記錄集時,調用過程或函數,然後再引用返回的遊標即可;
二、創建一個自定義記錄表類型,再通過它來創建一個帶參數的視圖,當要獲得記錄集時,使用SELECT * FROM 視圖名(參數)即可;
三、使用包,在包中創建一個自定義記錄表類型,再在其中創建帶此記錄表變量的OUT參數的過程(或返回此記錄表類型的函數),在過程中將所需記錄數據插入此變量中,當要獲得記錄集時,使用SELECT調用包的過程的語句即可;