oracle中游标在存储过程中的简单使用

-- 方法一,定义一个包(Package)和包体(Package Body),在包中
--声明一个全局的REF CURSOR类型,并在包体中实现存储过程。

CREATE OR REPLACE PACKAGE my_package AS
    TYPE my_refcursor IS REF CURSOR;
    PROCEDURE pro_ceshi001(p_cur OUT my_refcursor);
END my_package;
/

CREATE OR REPLACE PACKAGE BODY my_package AS
    PROCEDURE pro_ceshi001(p_cur OUT my_refcursor) AS
    BEGIN
        OPEN p_cur FOR
        SELECT jmydl,gyydl 
        FROM ceshi001;
    END pro_ceshi001;
END my_package;
/


-- 方法二,如果不想使用包,也可以直接在存储过程中定义REF CURSOR类型的输出参数。
--创建一个带游标的存储过程,SYS_REFCURSOR这是Oracle提供的内置REF CURSOR类型

CREATE OR REPLACE PROCEDURE pro_ceshi001(p_cur OUT SYS_REFCURSOR) AS
BEGIN
    OPEN p_cur FOR
        SELECT jmydl,gyydl 
        FROM ceshi001;
END pro_ceshi001;
/

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

-- 将从游标中获取到数据打印出来

DECLARE
	v_cur SYS_REFCURSOR;
	v_jmydl USER_KUNKUN.ceshi001.jmydl%TYPE;
	v_gyydl USER_KUNKUN.ceshi001.gyydl%TYPE;
BEGIN
		USER_KUNKUN.pro_ceshi001(v_cur);
    LOOP
			FETCH v_cur INTO  v_jmydl,v_gyydl;
			EXIT WHEN v_cur%NOTFOUND;
			DBMS_OUTPUT.PUT_LINE('jmydl: ' || v_jmydl || ', gyydl: ' || v_gyydl);
    END LOOP;
		CLOSE v_cur;
END;
/

-- 将从游标中获取到数据存入另一张表

DECLARE
	v_cur SYS_REFCURSOR;
	v_jmydl USER_KUNKUN.ceshi001.jmydl%TYPE;
	v_gyydl USER_KUNKUN.ceshi001.gyydl%TYPE;
BEGIN
		USER_KUNKUN.pro_ceshi001(v_cur);
    LOOP
			FETCH v_cur INTO  v_jmydl,v_gyydl;
			EXIT WHEN v_cur%NOTFOUND;
			insert into  ceshi002 values(v_jmydl,v_gyydl)  ;
    END LOOP;
		CLOSE v_cur;
END;
/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值