oracle游标怎么长度 oracle游标大小

oracle游标在实际的应用中要如何使用

您正在看的ORACLE教程是:如何在Oracle中使用游标来实现多重循环。

成都创新互联公司-专业网站定制、快速模板网站建设、高性价比吉水网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式吉水网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖吉水地区。费用合理售后完善,10年实体公司更值得信赖。

这篇文章,是最近在写一个项目中所用的存储过程,由于是第一次接触oracle,其间花费了许多功夫,才把功能实现!特记录下来,以供参考!

create or replace package PSH_GPRSSTREAMSTAT is

-- Author : ADMINISTRATOR

-- Created : 2004-12-8 10:56:01

-- Purpose : GPRS流量统计状态

-- 统计GPRS流量

type

C_Cur is ref cursor;

function Calcu_GPRSSTREAM return number;

end PSH_GPRSSTREAMSTAT;

create or replace package body PSH_GPRSSTREAMSTAT is

function Calcu_GPRSSTREAM return number

is

c_IPPackHeadLen constant number := 40; -- 定义IP包头长度

CURSOR c_SPINFO is

select distinct spid from sh_spinfo where isactive = '0';

c_MDTINFO C_Cur ;

v_MDTINFO number;

v_UpTransContentLens number(20,0); -- 存放当前GPRS终端上传转发的信息内容长度

v_UpContentLens number(20,0);

v_UpTotalLens number(20,0); -- 累计GPRS终端上传的信息内容长度

v_DownContentLens number(20,0);

v_DownTotalLens number(20,0);

newID number(20,0);

begin

-- 初始化

select max(statid) into newID from sh_gprsstreamstat;

if (newID is null) then

newID := 1;

end if;

for v_SPINFO In c_SPINFO loop -- 首先获取SPID

-- 其次遍历出与当前SPID对应的所有MDT

open c_MDTINFo for select distinct mdtid from sh_mdtinfo where (isactive = '0') and (spid = v_SPINFO.spid);

loop

fetch c_MDTINFO into v_MDTINFO;

exit when c_MDTINFO%notfound;

v_UpContentLens := 0;

v_UpTransContentLens := 0;

v_UpTotalLens := 0;

v_DownContentLens := 0;

v_DownTotalLens := 0;

-- 下面两个select语句是用来获得GPRS终端上传的信息流量

select sum(length(content) + c_IPPackHeadLen) into v_UpContentLens from sh_gprsmdtupinfo where (MDTID = v_MDTINFO) and (spid = v_SPINFO.spid) ;

select sum(length(content) + c_IPPackHeadLen) into v_UpTransContentLens from sh_gprsmdttransinfo where (issuccess = '1') and (MDTID = v_MDTINFO) and (spid = v_SPINFO.spid) ;

if (v_UpContentLens is null) then

v_UpContentLens := 0;

end if;

if (v_UpTransContentLens is null) then

v_UpTransContentLens := 0;

end if;

v_UpTotalLens := v_UpTotalLens + v_UpContentLens + v_UpTransContentLens;

-- 下面的Select语句是用来获得服务商下发的信息流量

select sum(length(content) + c_IPPackHeadLen) into v_DownContentLens from sh_gprsspdowninfo where (MDTID = v_MDTINFO) and (spid = v_SPINFO.spid) ;

if (v_DownContentLens is null) then

v_DownContentLens := 0;

end if;

v_DownTotalLens := v_DownTotalLens + v_DownContentLens ;

-- 将统计出的累计值存放到流量状态统计表中

if (v_UpTotalLens 0) or (v_DownTotalLens 0) then

insert into sh_gprsstreamstat (statid,spid,mdtid,starttime,endtime,mdtupstream,spdownstream)

values(newID,v_SPINFO.spid,v_MDTINFO,sysdate,sysdate,v_UpTotalLens,v_DownTotalLens);

-- 自增量加1

newID := newID + 1;

end if;

end loop;

close c_MDTINFO;

commit;

end loop;

return 1;

end;

begin

null;

end PSH_GPRSSTREAMSTAT;

Oracle中的存储过程,怎么获取到游标的长度

无法直接获得.

必须把游标fetch

循环一遍,才知道有多少行.

oracle中游标的使用?

这样的问法好笼统,不过,还是把我整理的给你看看吧~个人整理,无复制的哦~

A:分类:

1:隐式游标:非用户明确声明而产生的游标. 你根本看不到cursor这个关键字.

2:显示游标:用户明确通过cursor关键字来声明的游标.

3:引用游标:

B:什么是隐式游标:

1:什么时候产生:

会在执行任何合法的SQL语句中产生.他不一定存放数据.也有可能存放记录集所影响的行数.

如果执行SELECT语句,这个时候游标会存放数据.如果执行INSERT、UPDATE、 DELETE会存放记录影响的行数.

C:隐式游标叫什么名字:

名字叫sql

关于sql的游标变量到底有哪些呢?

作用:返回最近一次执行SQL语句所涉及的游标相关信息.因为每执行一次SQL语句,都会产生一个隐式游标.那么当前执行的SQL语句就是当前的隐式游标.

sql%found

sql%notfound

sql%rowcount

sql%isopen

D:关于隐式游标的例子:

create table 学生基本信息表

(

StuID number(2),

StuName varchar2(20)

)

alter table 学生基本信息表 add constraint PK_STUID primary key(StuID)

declare

num number:=0;

begin

num:=num;

delete from 学生基本信息表 where StuID=num;

if sql%notfound then

dbms_output.put_line('该行数据没有发现');

else

dbms_output.put_line('数据被发现并删除,影响的行数为:'||sql%rowcount);

end if;

end;

E:关于显示游标的例子:

1:如何定义显示游标

declare cursor cursor_name is [select语句];

declare cursor mycur is select empno,ename,job from scott.emp;

2:如何打开游标:

open cursor_name;

open mycur;

3:如何通过游标来读取数据

fetch cursor_name into variable_list

4:如何关闭游标:

close cursor_name;

close mycur;

注意:在Oracle中,不需要显示销毁游标.因为在Oracle中,很多东西是由JAVA写的.Oracle会自动销毁游标.

5:举例:

declare

cursor mycur is select empno,ename,job from emp; --创建游标

vempno emp.empno%type;

vename emp.ename%type;

vjob emp.job%type;

begin

open mycur;--打开游标

fetch mycur into vempno,vename,vjob;--使用数据

dbms_output.put_line('I Found You!'||mycur%rowcount||'行');

dbms_output.put_line('读取的数据为'||vempno||' '||vename||' '||vjob);

close mycur;

end;

因为只读出来一条,所以要遍历一下:

declare

cursor mycur is select empno,ename,job from emp;

vempno emp.empno%type;

vename emp.ename%type;

vjob emp.job%type;

begin

open mycur;

loop—循环,遍历

fetch mycur into vempno,vename,vjob;

exit when mycur%notfound;

if mycur%found then

dbms_output.put_line('读取的数据为'||vempno||' '||vename||' '||vjob);

end if;

end loop;

dbms_output.put_line('I Found You!'||mycur%rowcount||'行');

close mycur;

end;

6:通常情况下我们在读取表数据的时候,我们需要动态的去查询.所以能不能在Oracle中给游标带参数呢?可以!

1):如何定义带参数的游标:

declare cursor cursor_name(参数名称 参数类型描述) is select xxxxx from bbbbb where aaa==??? and ccc=???;

2):例子:

游标是一个集合,读取数据有两种方式

第一种方式: open fetch close

第二种方式: for 一但使用了for循环 ,在循环刚刚开始的时候,相当于执行open,在处理循环的时候,相当于执行fetch,在退出循环的时候,相当于执行了close

Declare cursor query(vname varchar) is select empno,ename,job from emp where ename like'%'||vname||'%';

三种游标的例子:

--

DECLARE

CURSOR TEST_CUR IS

SELECT * FROM EMP;

MY_CUR EMP%ROWTYPE;

BEGIN

OPEN TEST_CUR;

FETCH TEST_CUR INTO MY_CUR;

WHILE TEST_CUR%FOUND

LOOP

DBMS_OUTPUT.PUT_LINE(MY_CUR.EMPNO||','||MY_CUR.ENAME);

FETCH TEST_CUR INTO MY_CUR;

END LOOP;

CLOSE TEST_CUR;

END;

--

DECLARE

CURSOR TEST_CUR IS

SELECT * FROM EMP;

BEGIN

FOR MY_CUR IN TEST_CUR

LOOP

DBMS_OUTPUT.PUT_LINE(MY_CUR.EMPNO||','||MY_CUR.ENAME);

END LOOP;

END;

--

DECLARE

CURSOR TEST_CUR(V_SAL NUMBER) IS

SELECT *

FROM EMP

WHERE SAL V_SAL;

V_SAL1 NUMBER ;

BEGIN

V_SAL1 := 2000;

FOR MY_CUR IN TEST_CUR(V_SAL1)

LOOP

DBMS_OUTPUT.PUT_LINE(MY_CUR.EMPNO||','||MY_CUR.ENAME);

END LOOP;

END;

如何取得oracle游标总长度?

一般用游标,不用关心长度,系统自动办你判断是否有值。你可以在网上搜一些用法例子。

oracle数据库中怎么设置数据长度

1、通过图形界面操作,在左侧依次选择objects-tables,右键单击要修改的表名,选中‘Edit’-column,可以直接修改;

2、使用DDL语句:alter table 表名 modify 字段名(字符类型(长度))

例如:

alter table emp modify ename(varchar2(32))

oracle游标怎么使用?创建完了 怎么用?

在定义参数游标之后,当使用不同参数值多次打开游标时,可以产生不同的结果集,语法如下:

cursor

cursor_name(parameter_name

datatype)

is

select_statement;

定义参数游标时,游标参数只能指定数据类型,而不能指定长度。

示例如下:

declare

cursor

temp_cursor(no

number)

is

select

name

from

cip_temps

where

id=no;

v_name

cip_temps.name%type;

begin

open

temp_cursor(1);

loop


本文名称:oracle游标怎么长度 oracle游标大小
文章起源:http://scyanting.com/article/hijgio.html