哪里能下载家装水电智能安装图电子书?

36257人阅读
使用隐式游标和显式游标:
1.查询返回单行记录时→隐式游标;
2.查询返回多行记录并逐行进行处理时→显式游标
--显示游标属性
CURSOR cur_emp IS SELECT * FROM
row_emp cur_emp%ROWTYPE;
FETCH cur_emp INTO row_
WHILE cur_emp%FOUND
dbms_output.put_line(row_emp.empno||'----'||row_emp.ename);
FETCH cur_emp INTO row_
close cur_
--使用显式游标修改数据(给所有的部门经理加薪1000)
CURSOR emp_cur IS
SELECT empno,ename,sal FROM emp WHERE job='MANAGER' FOR UPDATE;
emp_row emp_cur%ROWTYPE;
FETCH emp_cur INTO emp_
IF emp_cur%NOTFOUND THEN
UPDATE emp SET sal=sal+1000 WHERE CURRENT OF emp_
CLOSE emp_
·注意:1、如果游标打开之前或关闭之后,使用游标属性,Oracle会抛出一个INVALID_CURSOR错误(ORA-01001);
&&&&&&&&2、如果在第一次fetch后结果集是空的,%found=false,%NotFound=true,%ROWCOUNT=0;
&&&&&&&&3、如果使用了BULK COLLECT,那么%ROWCOUNT的值可能不是0或1,实际上他返回的是提取到相关集合的行数。
--游标for循环(给所有的部门经理减薪1000)
CURSOR emp_cur IS
SELECT empno,ename,sal FROM emp WHERE job='MANAGER' FOR UPDATE;
FOR emp_row IN emp_cur
UPDATE emp SET sal=sal-1000 WHERE CURRENT OF emp_
--我们可以看到游标FOR循环确实很好的简化了游标的开发,我们不在需要open、fetch和close语句,不在需要用%FOUND属性检测是否到最后一条记录,这一切Oracle隐式的帮我们完成了。
--给经理加薪5000,其他加薪1000
CURSOR emp_cur IS
SELECT * FROM emp FOR UPDATE;
&FOR emp_row IN emp_cur
&IF emp_row.job='MANAGER' THEN
&UPDATE emp SET sal=sal+5000 WHERE CURRENT OF emp_
&UPDATE emp SET sal=sal+1000 WHERE CURRENT OF emp_
&END LOOP;
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:120599次
积分:1216
积分:1216
排名:千里之外
原创:18篇
转载:20篇
评论:10条
(2)(1)(1)(6)(8)(2)(18)ORACLE游标FOR循环
ORACLE游标FOR循环前一段时间参加了一个ORACLE的一个面试,当问到通常方式打开游标和用FOR循环的方式打开游标有什么区别时,脑海里一片空白,因为之间从来没用FOR循环打开游标过,回来之后在网上搜索到下面解释,...
ORACLE游标FOR循环
前一段时间参加了一个ORACLE的一个面试,当问到通常方式打开游标和用FOR循环的方式打开游标有什么区别时,脑海里一片空白,因为之间从来没用FOR循环打开游标过,回来之后在网上搜索到下面解释,骤然明朗
游标FOR循环
在大多数时候我们在设计程序的时候都遵循下面的步骤:
1、打开游标
2、开始循环
3、从游标中取值
4、检查那一行被返回
6、关闭循环
7、关闭游标
可以简单的把这一类代码称为游标用于循环。但还有一种循环与这种类型不相同,这就是FOR循环,用于FOR循环的游标按照正常的声明方式声明,它的优点在于不需要显式的打开、关闭、取数据,测试数据的存在、定义存放数据的变量等等。游标FOR循环的语法如下:
FOR record_name IN
(corsor_name[(parameter[,parameter]...)]
| (query_difinition)
statements查看: 2866|回复: 7
带参数游标FOR循环
论坛徽章:0
CURSOR var_c(object_type number)--数据来源
SELECT T.OBJECT_TYPE ,T.TP_MAPS_SRC_ID,T.TP_MAPS_ID,T.ITEMS_SRC
&&FROM TP_MAPS_SRC_TBL T WHERE&&T.OBJECT_TYPE=object_
FOR temp IN var_c(1)--节点
& && &&&LOOP
& && && & v_src_id:=temp.tp_maps_src_
& && && & v_sql:=temp.items_
& && &&&END LOOP;&&
FOR temp IN var_c(2)--连线
& && &&&LOOP
& && && & v_src_id:=temp.tp_maps_src_
& && && & v_sql:=temp.items_
& && &&&END LOOP;&&
对于上面的var_c,我在调试的时候,不论我的参数传的是1还是2,
结果都是一样的,查询到全部的数据。没有起到查询条件的作用,这是怎么回事
大家帮忙看下.
论坛徽章:1088
把参数名字改成其他的
认证徽章论坛徽章:283
又见这个坑。
object_type number 改成V_object_type number
论坛徽章:1088
T.OBJECT_TYPE=object_
T.OBJECT_TYPE=var_c.object_
论坛徽章:0
可以了,没起到作用
求职 : 认证徽章论坛徽章:11
字段名=参数名
认证徽章论坛徽章:24
就是参数名跟字段名一致导致的,虽然你区分大小写了但是oracle是不区分的。
传入参数换一个名字吧。
认证徽章论坛徽章:22
这个坑有点傻。。。哈哈
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号Oracle 存储过程中的循环,条件判断,存储过程,游标小结
Oracle 存储过程中的循环,条件判断,存储过程,游标小结
Oracle 存储过程中的循环,条件判断
for...in...loop
for x in 1..100 loop
& deal with
& 执行语句
exit when 条件
i:=1;
while i&99
i:=i+1;
1.if...elsif...else...end if
if conditions
  consitions result;
elsif xxx and xxx
    conditions result;
    conditions result;
end if
2.case when end case判断
v_num:=1
case v_num
  when  1 then
   conditions reuslt;
  when 2 then
   conditions result;
   else
null;
end case;
游标cursor
create or replace procedure pro_1(
 checknum in number,
 ref_cursor out sys_refcursor
begin
 open ref_cursor for select × from.......
end pro_1;
sys_refcursor 的三个状态属性
%notfound
%found
%roucount 当前游标所指向的行位置
example1:通过游标返回一个结果集并将这个游标遍历输出
create or replace procedure pro_1(
 checknum in number,
 ref_cursor out sys_refcursor
begin
  open ref_cursor for select × from.......;
loop 
fetch ref_cursor into t_tmp;
exit when ref_cursor%notfound;
dbms_output.put_line(t_tmp.id);
update  table....
where id=t_tmp.id;
commit;
end loop;
close ref_cursor;
end pro_1;
我的热门文章
即使是一小步也想与你分享

我要回帖

更多关于 家装水电智能安装图 的文章

 

随机推荐