oracle怎么存储游标,oracle 存储过程调用有游标的存储过程

Oracle存储过程和游标操作

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

创新互联建站拥有10多年成都网站建设工作经验,为各大企业提供成都做网站、网站设计服务,对于网页设计、PC网站建设(电脑版网站建设)、成都App定制开发、wap网站建设(手机版网站建设)、程序开发、网站优化(SEO优化)、微网站、国际域名空间等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了很多网站制作、网站设计、网络营销经验,集策划、开发、设计、营销、管理等网站化运作于一体,具备承接各种规模类型的网站建设项目的能力。

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存储过程游标for循环怎么写

首先编写存储过程的整体结构,如下:

create or replace procedure test_proc is

v_date date; --变量定义

begin

select sysdate into v_date from dual;

end test_proc;

2

定义游标:

create or replace procedure test_proc is

v_date date; --定义变量

cursor cur is select * from ldcode; --定义游标

begin

select sysdate into v_date from dual;

end test_proc;

3

编写for循环:

create or replace procedure test_proc is

v_date date; --定义变量

cursor cur is select * from ldcode where rownum10; --定义游标

begin

select sysdate into v_date from dual;

--游标for循环开始

for temp in cur loop --temp为临时变量名,自己任意起

Dbms_Output.put_line(temp.Code); --输出某个字段,使用"变量名.列名"即可。

end loop;

--游标for循环结束

end test_proc;

4

测试运行,点击【DBMS Output】标签页查看结果如下图:

END

二、带参数的游标for循环

1

定义带参数的游标:

cursor cur(v_codetype ldcode.Codetype%TYPE) is

select * from ldcode where codetype = v_codetype; --定义游标

定义游标格式:

cursor 游标名称(变量定义) is 查询语句;

注意:

where条件中的变量名v_codetype要与游标定义cur(v_codetype ldcode.Codetype%TYPE)中的一致。

2

编写for循环部分:

--游标for循环开始

for temp in cur('llmedfeetype') loop

--temp为临时变量名,自己任意起

--cur('llmedfeetype')为"游标名称(传入的变量)"

Dbms_Output.put_line(temp.Code); --输出某个字段,使用"变量名.列名"即可。

end loop;

--游标for循环结束

3

测试运行,点击【DBMS Output】标签页查看结果如下图:


文章题目:oracle怎么存储游标,oracle 存储过程调用有游标的存储过程
URL链接:http://myzitong.com/article/hddjid.html