重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

oracle如何存储游标,如何使用oracle的游标

Oracle存储过程游标for循环怎么写

举例回答:

创新互联服务项目包括札达网站建设、札达网站制作、札达网页制作以及札达网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,札达网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到札达省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

案例:

--For 循环游标

--(1)定义游标

--(2)定义游标变量

--(3)使用for循环来使用这个游标

declare

--类型定义

cursor c_job

is

select empno,ename,job,sal

from emp

where job='MANAGER';

--定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型

c_row c_job%rowtype;

begin

for c_row in c_job loop

dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);

end loop;

end;

Oracle存储过程和游标操作

-- 第一个题目,我的表叫stu,你别忘了改成你的表名

create or replace procedure pro7

as

cursor c_emp1 is select ename,sal from stu;

vename stu.ename%type;

vsal stu.sal%type;

vnewsal stu.sal%type;

vfd number := 0;

begin

open c_emp1;

loop

fetch c_emp1 into vename,vsal;

exit when c_emp1%notfound;

vfd := vsal*0.2;

if vfd = 300

then update stu set sal = sal+vfd where ename=vename;

vnewsal := vsal+vfd;

dbms_output.put_line('员工' || vename || '涨了' || vnewsal || '工资');

end if;

end loop;

close c_emp1;

end;

oracle数据库的游标和存储过程怎么写?

--创建存储

CREATE

OR

REPLACE

PROCEDURE

xxxxxxxxxxx_p

(

--参数IN表示输入参数

OUT表示输入参数

类型

使用任意Oracle

类型

is_ym

IN

CHAR

)

AS

--定义变量

vs_msg

VARCHAR2(4000);

--错误信息变量

vs_ym_beg

CHAR(6);

--起始月份

vs_ym_end

CHAR(6);

--终止月份

vs_ym_sn_beg

CHAR(6);

--同期起始月份

vs_ym_sn_end

CHAR(6);

--同期终止月份

--定义游标(简单

遍历

集)

CURSOR

cur_1

IS

SELECT

area_code,CMCODE,SUM(rmb_amt)/10000

rmb_amt_sn,SUM(usd_amt)/10000

usd_amt_sn

FROM

BGD_AREA_CM_M_BASE_T

WHERE

ym

=

vs_ym_sn_beg

AND

ym

=

vs_ym_sn_end

GROUP

BY

area_code,CMCODE;BEGIN

--用输入参数给变量赋初值

Oralce

SUBSTR

TO_CHAR

ADD_MONTHS

TO_DATE

函数

vs_ym_beg

:=

SUBSTR(is_ym,1,6);

vs_ym_end

:=

SUBSTR(is_ym,7,6);

vs_ym_sn_beg

:=

TO_CHAR(ADD_MONTHS(TO_DATE(vs_ym_beg,'yyyymm'),

-12),'yyyymm');

vs_ym_sn_end

:=

TO_CHAR(ADD_MONTHS(TO_DATE(vs_ym_end,'yyyymm'),

-12),'yyyymm');

--先删除表

特定条件

数据

DELETE

FROM

xxxxxxxxxxx_T

WHERE

ym

=

is_ym;

--

用内置

DBMS_OUTPUT

put_line

打印

影响

记录行数

系统变量SQL%rowcount

DBMS_OUTPUT.put_line('del

月记录='||SQL%rowcount||'条');

INSERT

INTO

xxxxxxxxxxx_T(area_code,ym,CMCODE,rmb_amt,usd_amt)

SELECT

area_code,is_ym,CMCODE,SUM(rmb_amt)/10000,SUM(usd_amt)/10000

FROM

BGD_AREA_CM_M_BASE_T

WHERE

ym

=

vs_ym_beg

AND

ym

=

vs_ym_end

GROUP

BY

area_code,CMCODE;

DBMS_OUTPUT.put_line('ins

月记录='||SQL%rowcount||'条');

--遍历游标处理

更新

遍历游标

几种

用for语句

比较直观

FOR

rec

IN

cur_1

LOOP

UPDATE

xxxxxxxxxxx_T

SET

rmb_amt_sn

=

rec.rmb_amt_sn,usd_amt_sn

=

rec.usd_amt_sn

WHERE

area_code

=

rec.area_code

AND

CMCODE

=

rec.CMCODE

AND

ym

=

is_ym;

END

LOOP;

COMMIT;

--错误处理部

OTHERS表示除

声明外

任意错误

SQLERRM

系统内置变量保存

前错误

详细信息

EXCEPTION

WHEN

OTHERS

THEN

vs_msg

:=

'ERROR

IN

xxxxxxxxxxx_p('||is_ym||'):'||SUBSTR(SQLERRM,1,500);

ROLLBACK;

--

前错误记录进

志表

INSERT

INTO

LOG_INFO(proc_name,error_info,op_date)

VALUES('xxxxxxxxxxx_p',vs_msg,SYSDATE);

COMMIT;

RETURN;

END;

ORACLE存储过程中的动态游标

你这种, 表名字是是参数的情况下, 需要使用 动态 sql 来处理了。

你需要先定义一个变量, 来存储你的 sql 语句。

然后 OPEN v_cursor FOR 那个 sql 语句的字符串

下面是一个例子:

SQL DECLARE

2 TYPE refcursor IS REF CURSOR;

3 v_cursor REFCURSOR;

4 v_Sql VARCHAR(200);

5 v_name VARCHAR(10);

6 BEGIN

7 -- 动态SQL

8 v_Sql := 'SELECT name FROM test_dysql';

9 -- 打开游标.

10 OPEN v_cursor FOR v_SQL;

11 -- 循环处理.

12 LOOP

13 -- 填充数据.

14 FETCH v_cursor INTO v_name;

15 -- 无数据时 退出循环.

16 EXIT WHEN v_cursor%NOTFOUND;

17 -- 输出.

18 dbms_output.put_line(v_name);

19 END LOOP;

20 -- 关闭游标.

21 CLOSE v_cursor;

22 EXCEPTION

23 WHEN OTHERS THEN

24 -- 发生异常时,如果游标还打开,那么关闭掉.

25 IF (v_cursor%isopen) THEN

26 CLOSE v_cursor;

27 END IF;

28 RAISE;

29 END;

30 /

A

B

C

D

E

PL/SQL procedure successfully completed.


新闻名称:oracle如何存储游标,如何使用oracle的游标
URL标题:http://cqcxhl.com/article/hseodo.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP