Ⅰ 6、什么是存储过程什么是游标,何时使用、何时不用游标
存储过程是一组命名了的SQL语句集合,是为了完成特定功能汇集而成的。该集合编译后存放在数据库中,可根据实际情况重新编译,可直接运行,也可远程运行且存储过程直接在服务器端运行。
游标实际上是一种能从包括多条数据记录的结果集(结果集是select查询之后返回的所有行数据的集合)中每次提取一条记录的机制充当指针的作用,遍历结果中的所有行,但他一次只指向一行。
游标在循环处理字段的时候使用
建议:尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写;使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效;与临时表一样,游标并不是不可使用。
Ⅱ oracle存储过程游标问题
--打开游标并提取后面SQL的第一行数据放到游标中 这里就是打开游标
open for 是隐式游标的写法 不建议使用 这种游标好象不需要关闭 具体你自己测试下 而且少了expection 处理
fetch mycur into yang_02;
--循环插入数据
多余了 可以不要 前面有fetch了如果还有这里的话 就只能插入奇数行
其他没什么问题了 还有你这个过程用ref cursor是浪费 没必要用 用简单的显示游标更好点
Ⅲ 如何在存储过程中使用游标
ALTER proc [dbo].[存储过程名]
as
begin
declare 游标名字 cursor for select 列名 from 表名 where 条件--先申明游标指向查询出的结果,一列,或者多列都可以,条件自定
declare 变量名 varchar(400)--存储取到的值
open 游标名 --开启游标
while @@FETCH_STATUS=0--取值
begin
fetch next FROM 游标名 into 变量名--这样就将游标指向下一行,得到的第一行值就传给变量了
-------------------------------------------
--需要执行的操作,例如修改某表中的字段
update 表名
set 列名=值
where (修改表中的列)=变量名
-------------------------------------------
end
close 游标名--关闭游标
deallocate 游标名--释放游标
end
Ⅳ oracle存储过程游标使用疑问
1、for t_name in (select ...) loop
这个是隐式游标,相当于一个结果集,隐式Cursor由系统自动打开和关闭。
exit when %notfound是配合fetch使用,没有fetch就不需要。
你第一个存储过程可以这样写:
create or replace procere d_1 is
begin
for cur in (select * from t_t) ---这个cur是隐式游标,无需定义,直接使用。
loop
dbms_output.put_line(cur.name);
end loop;
end;
/
2、使用的是标准的显式游标
a 定义游标---Cursor [Cursor Name] IS;
b 打开游标---Open [Cursor Name];
c 操作数据---Fetch [Cursor name]
d 关闭游标---Close [Cursor Name]
希望能帮到你。
Ⅳ 存储过程的游标是什么 有什么作用
ALTER proc [dbo].[存储过程名]
as
begin
declare 游标名字 cursor for select 列名 from 表名 where 条件--先申明游标指向查询出的结果,一列,或者多列都可以,条件自定
declare 变量名 varchar(400)--存储取到的值
open 游标名 --开启游标
while @@FETCH_STATUS=0--取值
begin
fetch next FROM 游标名 into 变量名--这样就将游标指向下一行,得到的第一行值就传给变量了
-------------------------------------------
--需要执行的操作,例如修改某表中的字段
update 表名
set 列名=值
where (修改表中的列)=变量名
-------------------------------------------
end
close 游标名--关闭游标
deallocate 游标名--释放游标
end
Ⅵ oracle 存储过程 游标
select isnull(a.姓名, b.姓名), a.手机号, isnull(a.身份证号, b.身份证号),isnull(a.住址, b.住址)
from 表1 a, 表2 b
where a.手机号=b.手机号