大橙子网站建设,新征程启航

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

oracle游标怎么写,oracle 游标使用

oracle中如何定义一个游标?

1.游标定义:\x0d\x0acursor XXXA is\x0d\x0a SELECT 语句;\x0d\x0aXXXB cursorName%rowtype;\x0d\x0a\x0d\x0aXXXA: 游标名\x0d\x0aXXXB: 游标行数据定义\x0d\x0a\x0d\x0a2. 打开游标:\x0d\x0a-- 打开之前最好先关一下,防止上次发生异常没有关掉而引发不必要的异常\x0d\x0a IF XXXA%ISOPEN THEN\x0d\x0a CLOSE XXXA;\x0d\x0a END IF;\x0d\x0a\x0d\x0aOpen XXXA ;\x0d\x0a Loop\x0d\x0a Fetch XXXA into XXXB;\x0d\x0a exit when XXXA%NOTFOUND;\x0d\x0a... ... 处理逻辑\x0d\x0a end loop;\x0d\x0a close XXXA;

目前成都创新互联公司已为成百上千的企业提供了网站建设、域名、网络空间、成都网站托管、企业网站设计、姚安网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

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的游标?

Oracle中的游标分为显示游标和隐式游标。

显示游标:

显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理;显示游标的操作:打开游标、操作游标、关闭游标;

隐式游标:

隐式游标是在执行插入(insert)、删除(delete)、修改(update)和返回单条记录的查询(select)语句时由PL/SQL自动定义的。PL/SQL隐式地打开SQL游标,并在它内部处理SQL语句,然后关闭它。

Oracle下如何用sql创建游标

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;

Fetch游标

使用的时候必须要明确的打开和关闭

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数据库的游标和存储过程怎么写?

--创建存储

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游标怎么写,oracle 游标使用
转载注明:http://dzwzjz.com/article/dscgoio.html
在线咨询
服务热线
服务热线:028-86922220
TOP