- 浏览: 1497946 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (523)
- JAVA (334)
- J2EE (18)
- JSP (21)
- JavaScript (14)
- it life (2)
- mobile develop (4)
- UBUNTU (14)
- Algorithm (14)
- DataBase (56)
- Browser/Server (1)
- linux (6)
- fedora (2)
- CSS (1)
- AjAX (3)
- HTML5 (1)
- EJB (1)
- osworkflow (2)
- Java face (5)
- spring (4)
- ICE (1)
- webService (2)
- MongoDB (1)
- JavaThread (4)
- JavaCollections (3)
- Hibernate (2)
- JavaMail (1)
- JavaBasic (1)
- Cache (1)
- https (4)
- DOM4J (1)
- JDOM (0)
- Mybatis (1)
- JUNIT (1)
- eclipse (1)
- easyMock (2)
最新评论
-
yadongliang:
...
自己认为的一些技术点 -
yadongliang:
每次看你头像都看的荷尔蒙分泌失调
WebService的两种方式SOAP和REST比较 (转) -
yadongliang:
hollo 写道一直有这种感觉,盲目的跟风,确实有一些人为了潮 ...
WebService的两种方式SOAP和REST比较 (转) -
welss:
博主,JNative怎么调用dll中的这种方法: int ...
JNative调用DLL -
Java_Antelope:
session.setAttribute和session.getAttribute(
1、隐式游标
实例1、用sql%found 相当于sql.found
下面是直接拷贝过来的,没有自己亲自运行,上面的全部是经过我的运行正确的代码:
实例1、用sql%found 相当于sql.found
create or replace procedure abing is --set serveroutput on; begin declare begin update former_emp set ename='isStrong' where empno='abin'; if sql%found then dbms_output.put_line('ok'); dbms_output.put_line(sql%rowcount); end if; if sql%notfound then dbms_output.put_line('no'); end if; exception when no_data_found then dbms_output.put_line('no data found'); end; end;
begin update former_emp set ename='isStrong' where empno='abin'; if sql%found then dbms_output.put_line('ok'); dbms_output.put_line(sql%rowcount); end if; if sql%notfound then dbms_output.put_line('no'); end if; exception when no_data_found then dbms_output.put_line('no data found'); end;
create or replace procedure abin_1 is --set serveroutput on; begin declare begin update former_emp set ename='isStrong' where empno='abing'; if sql%found then dbms_output.put_line('yes'); dbms_output.put_line(sql%rowcount); end if; if sql%notfound then dbms_output.put_line('no'); end if; end; end; 测试语句: begin declare i number:=0; begin for i in 1..5 loop abin_1; end loop; end; end;
create or replace procedure abin_1 is --set serveroutput on; begin declare name former_emp.empno%type; begin select ename into name from former_emp where empno='abin'; if sql%found then dbms_output.put_line('yes'); dbms_output.put_line(sql%rowcount); dbms_output.put_line(name); end if; if sql%notfound then dbms_output.put_line('no'); end if; end; end; 测试代码: begin declare i number; begin i:=0; for i in 1..5 loop abin_1; end loop; end; end;
create or replace procedure abin_1 is begin declare var_userid number(3); var_salary number(3); cursor mysor is select userid,salary from userinfo; begin open mysor; loop fetch mysor into var_userid,var_salary; exit when mysor%notfound; if var_userid=1 then update userinfo set salary=salary+salary*0.5 where userid=var_userid; end if; if var_userid=2 then update userinfo set salary=salary+salary*0.6 where userid=var_userid; end if; if var_userid=3 then update userinfo set salary=salary+salary*0.7 where userid=var_userid; end if; commit; end loop; end; end;
create or replace procedure abin_2 is begin declare cursor mysor is select * from userinfo; begin --open mysor; for a in mysor loop dbms_output.put_line(a.username); end loop; --close mysor; end; end; 测试代码: begin abin_2; end;
create or replace procedure allcursor is begin declare type mysor is ref cursor; var_sor mysor; var_user userinfo%rowtype; var_person personinfo%rowtype; begin open var_sor for select * from userinfo; loop fetch var_sor into var_user; exit when var_sor%notfound; dbms_output.put_line(var_user.username); end loop; close var_sor; open var_sor for select * from personinfo; loop fetch var_sor into var_person; exit when var_sor%notfound; dbms_output.put_line(var_person.pname); end loop; close var_sor; end; end;
create or replace procedure scursor is begin declare cursor mycur is select ename,salary from emp1; r_emp mycur%rowtype; begin open mycur; loop fetch mycur into r_emp; exit when mycur%notfound; dbms_output.put_line('ename='||r_emp.ename||' '||'salary='||r_emp.salary); end loop; close mycur; end; end; 测试代码: begin scursor; end;
带参数的游标 与存储过程和函数相似,可以将参数传递给游标并在查询中使用。这对于处理在某种条件下打开游标的情况非常有用。它的语法如下: CURSOR cursor_name[(parameter[,parameter],...)] IS select_statement; 定义参数的语法如下: Parameter_name [IN] data_type[{:=|DEFAULT} value] 与存储过程不同的是,游标只能接受传递的值,而不能返回值。参数只定义数据类型,没有大小。 另外可以给参数设定一个缺省值,当没有参数值传递给游标时,就使用缺省值。游标中定义的参数只是一个占位符,在别处引用该参数不一定可靠。 在打开游标时给参数赋值,语法如下: OPEN cursor_name[value[,value]....]; 参数值可以是文字或变量。 例: create or replace procedure bcursor is begin declare cursor c_dept is select * from dept order by deptno; cursor c_emp(p_dept varchar2) is select ename,salary from emp where deptno=p_dept order by ename; r_dept dept%rowtype; v_ename emp.ename%type; v_salary emp.salary%type; v_tot_salary emp.salary%type; begin open c_dept; loop fetch c_dept into r_dept; exit when c_dept%notfound; dbms_output.put_line('Department='||r_dept.deptno||',dname--'||r_dept.dname); v_tot_salary:=0; open c_emp(r_dept.deptno); loop fetch c_emp into v_ename,v_salary; exit when c_emp%notfound; dbms_output.put_line('Name:'||v_ename||'salary'||v_salary); v_tot_salary:=v_tot_salary+v_salary; end loop; close c_emp; dbms_output.put_line('Total Salary for dept:'||v_tot_salary); end loop; commit; close c_dept; end; end;
下面是直接拷贝过来的,没有自己亲自运行,上面的全部是经过我的运行正确的代码:
游标FOR循环 在大多数时候我们在设计程序的时候都遵循下面的步骤: 1、打开游标 2、开始循环 3、从游标中取值 那一行被返回 5、处理 6、关闭循环 7、关闭游标 可以简单的把这一类代码称为游标用于循环。但还有一种循环与这种类型不相同,这就是FOR循环,用于FOR循环的游标按照正常的声明方式声明,它的优点在于不需要显式的打开、关闭、取数据,测试数据的存在、定义存放数据的变量等等。游标FOR循环的语法如下: FOR record_name IN (corsor_name[(parameter[,parameter]...)] | (query_difinition) LOOP statements END LOOP; 下面我们用for循环重写上面的例子: DECALRE CURSOR c_dept IS SELECT deptno,dname FROM dept ORDER BY deptno; CURSOR c_emp (p_dept VARACHAR2) IS SELECT ename,salary FROM emp WHERE deptno=p_dept ORDER BY ename v_tot_salary EMP.SALARY%TYPE; BEGIN FOR r_dept IN c_dept LOOP DBMS_OUTPUT.PUT_LINE('Department:'|| r_dept.deptno||'-'||r_dept.dname); v_tot_salary:=0; FOR r_emp IN c_emp(r_dept.deptno) LOOP DBMS_OUTPUT.PUT_LINE('Name:' || v_ename || 'salary:' || v_salary); v_tot_salary:=v_tot_salary+v_salary; END LOOP; DBMS_OUTPUT.PUT_LINE('Toltal Salary for dept:'|| v_tot_salary); END LOOP; END; 在游标FOR循环中使用查询 在游标FOR循环中可以定义查询,由于没有显式声明所以游标没有名字,记录名通过游标查询来定义。 DECALRE v_tot_salary EMP.SALARY%TYPE; BEGIN FOR r_dept IN (SELECT deptno,dname FROM dept ORDER BY deptno) LOOP DBMS_OUTPUT.PUT_LINE('Department:'|| r_dept.deptno||'-'||r_dept.dname); v_tot_salary:=0; FOR r_emp IN (SELECT ename,salary FROM emp WHERE deptno=p_dept ORDER BY ename) LOOP DBMS_OUTPUT.PUT_LINE('Name:'|| v_ename||' salary:'||v_salary); v_tot_salary:=v_tot_salary+v_salary; END LOOP; DBMS_OUTPUT.PUT_LINE('Toltal Salary for dept:'|| v_tot_salary); END LOOP; END;
发表评论
-
sql 统计类语句
2014-03-17 16:59 12031、统计每月的成交量,按照逆序排序(2013年以来的每月销量, ... -
Jdbc 操作Oracle CLOB字段
2013-01-08 22:10 4496//这个适用于oracle10,11,以前oracle9操作C ... -
SQL重复记录处理(查找,过滤,删除)
2012-12-30 23:43 4835HZT表结构 ID int Title nvarchar( ... -
sql 如何过滤重复记录
2012-12-29 21:37 2454请各位大侠帮忙了 问题1:对于以下几个记录 ID 123456 ... -
Mysql 触发器和存储过程
2012-09-17 12:34 9961、首先建表: create table tababin( i ... -
Sql ACID
2012-09-12 17:57 931http://nathanchen.github.com/Re ... -
Oracle 表分区学习
2012-09-12 17:52 855http://love-flying-snow.iteye.c ... -
Oracle表分区
2012-09-12 17:19 1366废话少说,直接讲分区语法。 Oracle表分区分为四种:范围分 ... -
MYSQL中 ENUM 类型的详细解释
2012-03-12 23:30 2421ENUM 类型 ENUM 是一个字 ... -
Mysql 字段数据类型/长度及表类型详细说明
2012-03-12 23:20 15023一、MySQL 字段数据类型/长度 1、数值类型 列类型 ... -
MySQL中的datetime与timestamp比较
2012-03-04 19:30 1224相同 显示 TIMESTAMP列的显示格式与DATETI ... -
mysql 存储过程例子
2011-08-21 01:35 4010mysql 存储过程例子(当前我使用的是mysql 5.5) ... -
Oracle Cursor介绍
2011-08-21 00:54 1048一 概念 游标是SQL的一个内存工作区,由系统或用户以变量的 ... -
关于DB2存储过程的几个小实例
2011-08-20 03:21 2932================ CREATE PROCED ... -
oracle 游标遍历%rowtype中的记录
2011-08-20 01:49 7492那么我们使用Oracle游标 游标分为:静态游标和引用游标( ... -
oracle concat
2011-08-19 23:26 1213oracle 连接字符串: 连接两个字符串 sel ... -
oracle 存储过程
2011-08-19 21:55 999oracle的for循环,commit放在不同的位置,一个是每 ... -
sql 删除重复的记录
2011-08-19 16:32 963通过建立临时表删除: SQL>create ta ... -
Oracle 经典
2011-08-17 17:05 12371.删除重复项, 只保留第一条 delete table t ... -
DB2 分页
2011-07-25 01:59 1537//db.jsp <%@ page langua ...
相关推荐
Oracle 游标概述 Oracle 游标是 Oracle 数据库中的一种重要概念,用于查询数据库,获取记录集合(结果集)的指针。游标可以看作是一个临时表,你可以对其每一行的数据进行任意的操作。本文将对 Oracle 游标的概念、...
下面,我们将深入探讨Oracle游标的使用示例及其相关的知识点。 首先,游标的基本概念是它提供了一种方式来跟踪并控制SQL查询的结果集。在Oracle中,游标有四种状态:未打开、已打开、正在提取和已关闭。以下是一个...
### Oracle游标使用详解 #### 一、Oracle游标简介 在Oracle数据库中,游标是一种重要的机制,用于处理查询结果集。它允许用户通过PL/SQL编程语言逐行访问和处理查询返回的数据记录。游标可以是显式定义的(即在...
总之,Oracle游标提供了处理查询结果的强大工具,使开发者能够灵活地在PL/SQL中操作数据。无论是隐式还是显式游标,都极大地增强了对数据库的交互能力,使得程序能根据查询结果进行适当的操作。理解并熟练运用游标是...
Oracle游标是数据库编程中非常重要的一个概念,主要用于处理SQL查询的结果集。游标允许我们按行处理数据,逐条读取结果集,而不仅仅是一次性获取所有数据。在Oracle数据库中,游标对于复杂的事务处理、动态SQL以及...
Oracle 游标使用方法及语法大全 Oracle 游标是 PL/SQL 程序中的一种重要组件,用于处理查询结果集。游标可以分为隐式游标和显式游标两种,隐式游标由 PL/SQL 管理,隐式游标打开时查询开始,查询结束时隐式游标自动...
### Oracle游标使用及实例详解 #### 一、Oracle游标概述 在Oracle数据库中,游标(Cursor)是一种用于处理SQL查询结果集的方式。它允许用户逐行地读取和处理查询结果,这对于需要对每一行数据进行特定操作的情况非常...
### Oracle游标使用详解 #### 一、游标概述 游标是Oracle数据库中用于处理查询结果集的强大工具,尤其适用于需要逐行处理查询结果的情况。在Oracle中,游标可以分为两类:**显式游标**和**隐式游标**。 1. **隐式...
Oracle游标是数据库编程中非常重要的一个概念,它允许开发者逐行处理查询结果集,而不仅仅是一次性处理所有数据。在Oracle中,游标分为隐式游标和显式游标。 **一、游标简介** 游标的核心功能是提供一种方式来遍历...
根据提供的标题、描述以及部分代码内容,我们可以详细探讨Oracle游标的使用方法,特别是明确游标(Explicit Cursor)和隐式游标(Implicit Cursor)的区别及其具体应用方式。 ### Oracle游标简介 在Oracle数据库中...
通过本篇Oracle游标的使用大全,我们可以了解到Oracle数据库游标的类型、属性以及如何在PL/SQL中实现对数据集的逐行处理。这不仅有助于提升程序员的编程技能,也能使他们更深入地理解PL/SQL与Oracle数据库之间的交互...
### Oracle游标使用详解 #### 一、Oracle游标简介 在Oracle数据库中,游标是一种用于处理查询结果集的强大工具。它允许用户通过逐行访问数据来执行复杂的操作,如更新、删除或插入记录等。游标可以分为显式游标和...
Oracle游标是数据库管理系统中的一种重要机制,它允许程序员逐行处理查询结果集,而不仅仅是一次性获取所有数据。游标类似于C语言中的指针,能够灵活、高效地处理多条记录,尤其在需要循环处理或者根据当前行数据做...
根据提供的文件信息,我们可以归纳出以下Oracle游标的使用方法及相关知识点: ### 一、游标的基本概念 在Oracle数据库中,游标是一种重要的机制,它允许用户从查询结果集中逐行检索数据。游标可以分为两种类型:**...
首先,让我们来理解Oracle游标。游标是数据库系统提供的一种机制,允许用户在结果集上进行迭代,一次处理一行数据。在PL/SQL中,游标用于检索SQL查询返回的结果集,并按需逐行处理。以下是一个简单的游标使用示例: ...
### Oracle游标优化 在Oracle数据库管理中,游标是一种重要的机制,用于处理查询结果集。游标可以被看作是存储查询结果的一种临时区域,它允许用户通过循环逐行处理这些结果。游标不仅可以提高应用程序的灵活性,还...