您的位置:首页 > Web前端

PLSQL 循环游标 cursor loop fetch into【转载】

2014-08-20 22:16 507 查看


PLSQL 循环游标 cursor loop fetch into【转载】

PLSQL 循环游标 cursor 的一点心得体会

编辑 文章分类:数据库

set serveroutput on---------------打印输出信息,默认是FALSE

declare --------------------申明变量,分号结束

v_pages number;

v_numberPerPage number;

v_totalPages number;

v_cur sys_refcursor;

diy_id number;

diy_name varchar2(50);

diy_date date;

cursor c_list is select * from table_User i where i.id=4;

begin

----------------给变量初始化值

v_pages:=1;

v_numberPerPage:=20;

--调用的sp,参数分别是pages number 要查询的页数,numberPerPage number 每页显示几条 ,tatalPages number 输出参数,返回结果集总页数 , resultCursor cursor 结果集游标,返回查询结果

My_Test_SP(v_pages,v_numberPerPage,v_totalPages,v_cur);

------------第一种循环游标方式,最简单高效

for c in c_list loop

dbms_output.put_line('用户的id='||c.id); -------------输出结果集

end loop;

----------第二种循环游标方式

open v_cur ------打开游标,但是如果有这代码会提示错误,所以我运行的时候是注释这代码的,很奇怪,不知道什么原因

loop

fetch v_cur into diy_id,diy_name,diy_date;-----------这三个参数是My_Test_SP输出的游标参数返回的值,刚好3个字段,如果这里少些任何一个字段,plsql会提示错误,不能少

exit when v_cur%notfound; ----------定义跳出循环的条件,当每页记录则跳出

dbms_output.put_line('报表id='||diy_id||',报表名='||diy_name);--------输出结果

end loop;

close v_cur;---------关闭游标

dbms_output.put_line(v_totalPages);

end;

--fetch 的例子

SET SERVERIUTPUT ON

DECLARE

v_ename EMP.ENAME%TYPE;

v_salary EMP.SAL%TYPE;

CURSOR c_emp IS SELECT ename,sal FROM emp;

BEGIN

OPEN c_emp;

FETCH c_emp INTO v_ename,v_salary;

DBMS_OUTPUT.PUT_LINE('Salary of Employee'|| v_ename

||'is'|| v_salary);

FETCH c_emp INTO v_ename,v_salary;

DBMS_OUTPUT.PUT_LINE('Salary of Employee'|| v_ename

||'is'|| v_salary);

FETCH c_emp INTO v_ename,v_salary;

DBMS_OUTPUT.PUT_LINE('Salary of Employee'|| v_ename

||'is'|| v_salary);

CLOSE c_emp;

END ;

小注:存储过程中字符串单引号的转义处理

对于字符串中引号的处理,使用
1、chr(39)
2、q-quote(双单引号)

SQL> select 'tom'||chr(39)||' book' from dual;

'TOM'||CHR(39)||'BOOK'

----------------------

tom' book
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: