参考
declare
--类型定义
cursor c_job
is
select empno,ename,job,sal
from emp
where job='MANAGER';
--定义一个游标变量
c_row c_job%rowtype;
begin
open c_job;
loop
--提取一行数据到c_row
fetch c_job into c_row;
--判读是否提取到值,没取到值就退出
--取到值c_job%notfound 是false
--取不到值c_job%notfound 是true
exit when c_job%notfound;
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
end loop;
--关闭游标
close c_job;
end;
declare
--类型定义
cursor c_job
is
select empno,ename,job,sal
from emp
where job='MANAGER';
--定义一个游标变量
c_row c_job%rowtype;
begin
open c_job;
loop
--提取一行数据到c_row
fetch c_job into c_row;
--判读是否提取到值,没取到值就退出
--取到值c_job%notfound 是false
--取不到值c_job%notfound 是true
exit when c_job%notfound;
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
end loop;
--关闭游标
close c_job;
end;
解决方案 »
- oracle下怎么建立normal用户啊
- 数据库
- 数据库备份到磁带机?
- 问个数据库迁移的问题
- Oracle出现特异常情况,如何解决
- 请教:用ERWIN生成ORACLE数据库时,用了DROP table(因为原来有表),结果在数据库中多了很多名称是乱码的垃圾表,如何删除?
- 求助一条Sql语句!!
- ora-04031:无法分配4096的共享内存("shared pool","begin --Call procedur...","PL/SQL MPCODE","BAMIMA Bam Buffer")
- pl/sql 使用时报错!!请熟悉pl/sql的人士指点
- 关于 TableSpace 的问题
- oracle 死锁查询
- 修改表字段A的值如何触发修改字段B的值,触发器怎么取行的主键数值
(P_NUM VARCHAR2,
P_DATE DATE)
RETURN DATE IS
INPUNCH1 DATE;
TYPE A IS REF CURSOR;
P_CURSOR A;
BEGIN
OPEN P_CURSOR FOR SELECT STARTDTM INTO INPUNCH1 FROM VP_TIMESHEETITMV42
WHERE PERSONNUM=P_NUM
AND EVENTDATE=P_DATE;
LOOP
FETCH P_CURSOR INTO INPUNCH1;
EXIT WHEN P_CURSOR%NOTFOUND;
END LOOP;
CLOSE P_CURSOR;
RETURN INPUNCH1;
END ; 这样可以运行但是取一个值,是不是语句错误呢
给你个范例,下面这个是通过过程out参数将游标返回的
create or replace procedure my_procedure
(mypageNo number,mypageSize number,myInfo_Cursor out sys_refcursor)
as
pageNO number;
pageSize number;begin
open myInfo_Cursor for
select * from product
where pid between 1 + (pageNo - 1) * pageSize and 4 + (pageNo - 1) * pageSize;
end;
我想要的是要显示多个结果的那种,运行了之后总是显示一个,如果返回refcursor的话 则结果显示为一个<CURSOR>
(P_NUM VARCHAR2,
P_DATE DATE
)
RETURN DATE IS
P_CURSOR SYS_REFCURSOR;
INPUNCH1 DATE;
BEGIN
OPEN P_CURSOR FOR SELECT STARTDTM FROM VP_TIMESHEETITMV42
WHERE PERSONNUM=P_NUM
AND EVENTDATE=P_DATE;
LOOP
FETCH P_CURSOR INTO INPUNCH1;
EXIT WHEN P_CURSOR%NOTFOUND;
RETURN INPUNCH1;
END LOOP;
CLOSE P_CURSOR;
END ;
还是只显示一行!急求!!
FUNCTION OFILM_FN_INPUNCH1 (P_NUM VARCHAR2,P_DATE DATE,flag number)
在function内部根据flag返回不同的值即可,
create or replace procedure procedure_name --过程名
(
v_sdate in varchar2,
v_edate in varchar2, v_cur OUT pack_name.record_cur,--此处定义一个record记录的集合(定义在一个包里,里面具体定义需要返回多少列) v_retyrn_result OUT VARCHAR2
)begin
OPEN v_cur FOR select * from table_name;
end;
--2.以上返回的游标结果集合的定义
CREATE OR REPLACE PACKAGE pack_name AS TYPE record_name IS RECORD(
F1 VARCHAR2(200),
F2 VARCHAR2(200),
F3 VARCHAR2(200));
--需要多少列,什么类型,自己定义
TYPE record_cur IS REF CURSOR RETURN record_name;END;--3.前台java调用即可。