oracle游标怎么遍历,sql游标遍历

oracleo数据库,请问如何遍历rowtype或游标中的各个列?

数据库中有user_tab_columns和user_tables这两个表,你看看,可以解决的你问题。肿么没分

创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于做网站、成都网站制作、东宝网络推广、成都小程序开发、东宝网络营销、东宝企业策划、东宝品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供东宝建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com

oracle存储过程遍历游标问题

第二段代码是对的,

第一段代码是错的,你有没有发现,你第一段代码 的两条,后一条 应该是空值

还没有 fetch ,不应该判断 cur%notfound;

在fetch后,才应该判断 cur%notfound;

看看你的第一段代码:

open cur;

loop

exit when cur%notfound;

fetch cur into pname,pjob,psal;

dbms_output.put_line(pname||'的工作是'||pjob||',薪水是'||psal);

end loop;

close cur;

-- 第一轮循环, fetch到值, 进行输出

-- 第二轮循环,判断第一轮循环是否取到值; 然后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中如何定义一个游标,打开一个游标,并遍历

1.游标定义:

cursor XXXA is

SELECT 语句;

XXXB cursorName%rowtype;

XXXA: 游标名

XXXB: 游标行数据定义

2. 打开游标:

-- 打开之前最好先关一下,防止上次发生异常没有关掉而引发不必要的异常

IF XXXA%ISOPEN THEN

CLOSE XXXA;

END IF;

Open XXXA ;

Loop

Fetch XXXA into XXXB;

exit when XXXA%NOTFOUND;

... ... 处理逻辑

end loop;

close XXXA;

oracle如何实现遍历查询?

declare

teacher_name varchar(20)------------跟teacher表中老师名字类型保持一致

cursor t_name is select teachername from teacher---------申明游标t_name为从teacher表中查询老师名字

begin

open t_name;------打开游标t_name

loop-------开始循环(遍历)

fetch t_name into teacher_name-------将老师名字值赋予变量teacher_name

if t_name%found-------------开始遍历有值时插入以下数据

then

select name,count(*) into new_table

from table_teacher_student

where name=teacher_name group by name-----将一个老师名字依据条件插入新表数据

else

dmbs_output.put_line(‘完成所有工作’);---------遍历结束时输出完成工作

exit;

end if;

end loop;

仓促写下以上内容,可能部分语法报错,思路就是这样,很基本的一个游标使用。

oracle 游标遍历问题

应该是存储过程里有异常没处理

在END P1;的前面加上这一句

EXCEPTION

WHEN NO_DATA_FOUND THEN

RAISE exception_name;

END P1;


文章名称:oracle游标怎么遍历,sql游标遍历
分享路径:http://cdiso.cn/article/phegjj.html

其他资讯