PL/SQL程序之光标

原创 2012年03月21日 18:28:57
1、说明光标语法:
CURSOR  光标名  [ (参数名  数据类型[,参数名 数据类型]...)]  IS  SELECT   语句;
2、用于存储一个查询返回的多行数据
3、打开光标:                 open c1;    (打开光标执行查询)
4、	取一行光标的值:fetch c1 into pjob; (取一行到变量中)
5、关闭光标:          close  c1;(关闭游标释放资源)
6、注意: 上面的pjob必须与emp表中的job列类型一致:    定义:pjob emp.job%type;

例一:按职工的职称长工资,总裁1000元,经理800元,其他人员长400元
Java程序
SQL> update emp set sal = (
case job when 'PRESIDENT' then sal+1000
when 'MANGER' then sal+800
else sal+400
end);

PL/SQL程序
declare
--定义光标   查询empno以及job岗位
cursor c1 is select empno,job from emp;
--声明一个变量   此变量与emp表中的job字段类型一致
emp_job emp.job%type;
--声明一个变量   此变量与emp表中的empno字段类型一致
emp_empno emp.empno%type;
--开始
begin
 --打开光标
 open c1;
 --循环开始
 loop 
   --取出光标
   fetch c1 into emp_empno,emp_job;
   exit when c1%notfound;--判断光标是否存在  如果存在  则往下执行  否则  不执行
   
   if emp_job='PRESIDENT' then update emp set sal =sal+1000 where empno=emp_empno;
   elsif emp_job='MANAGER' then update emp set sal =sal+800 where empno=emp_empno;
   else  update emp set sal =sal+1000 where empno=emp_empno;
   end if;
   end loop;--退出循环
   close c1;--关闭光标
   end;--结束标识

例二:找出7369的职位
declare
 emp_job emp.job%type;
begin
 select job into emp_job from emp where empno=7369;-----into方法,把查询出来的job  名放到emp_job中
 dbms_output.put_line(emp_job);
end;

找出emp中的所有职位
 declare
--定义光标   查询job岗位
cursor c1 is select job from emp;
--声明一个变量   此变量与emp表中的job字段类型一致
emp_job emp.job%type;
--开始
begin
 --打开光标
 open c1;
 --循环开始
 loop 
   --取出光标
   fetch c1 into emp_job;
   exit when c1%notfound;--判断光标是否存在  如果存在  则往下执行  否则  不执行
   dbms_output.put_line(emp_job);
   end loop;--退出循环
   close c1;--关闭光标
   end;--结束标识

例三:查找出所有的ename
declare
cursor c1 is select * from emp;
emp_row emp%rowtype;
begin
open c1;
loop
fetch c1 into emp_row;
exit when c1%notfound;
dbms_output.put_line(emp_row.ename);
end loop;
close c1;
end;
例四:查询部门号为10的员工信息
declare
cursor c1 (emp_deptno number) is select * from emp where deptno=emp_deptno;
emp_row emp%rowtype;
begin
open c1(10);
dbms_output.put_line('部门号为10的员工信息');
loop
     fetch c1 into emp_row;
     exit when c1%notfound;
     dbms_output.put_line('员工编号'||emp_row.empno||'员工姓名'|| emp_row.ename||'员工工资'|| emp_row.sal||'员工部门编 
号'||emp_row.deptno);
end loop;
close c1;
end;
结果:
部门号为10的员工信息
员工编号7782员工姓名CLARK员工工资2450员工部门编号10
员工编号7839员工姓名KING员工工资5000员工部门编号10
员工编号7934员工姓名MILLER员工工资1300员工部门编号10
带参数的光标
例五:带有参数光标的练习
SQL> declare
  2  cursor c1(emp_deptno number) is select * from emp where deptno=emp_deptno;
  3  emp_row emp%rowtype;
  4  begin
  5  open c1(10);
  6  loop
  7  fetch c1 into emp_row;
  8  exit when c1%notfound ;
  9  dbms_output.put_line('员工的名称'|| emp_row.ename || emp_row.job);
 10  end loop;
 11  close c1;
 12  end;
 13  /
 结果:
员工的名称CLARKMANAGER
员工的名称KINGPRESIDENT
员工的名称MILLERCLERK

特别注意:

在打开游标之前最好先判断游标是否已经是打开的。

通过ISOPEN判断,格式:

游标%ISOPEN

IF mycur%ISOPEN  

THEN

null ;

ELSE

OPENmycur ;

END IF ;


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

PL/SQL程序设计之光标(游标)和例外的使用(二)

一.光标的介绍 1.光标的语法: CURSOR 光标名 [ (参数名 数据类型[,参数名 数据类型]…)] IS SELECT 语句; 2.作用:用于存储一个查询返回的...

PL/SQL之光标

1.光标的引入 光标(游标):就是一个结果集(ResultSet)。 2.光标的语法 CURSOR 光标名 [(参数名 数据类型[,参数名 数据类型]...)]   IS SELECT 语句;...

PL/SQL 光标的使用

--游标(光标)的使用 --查询打印员工的姓名和薪水 /* 光标的属性 %found %notfound %isopen 判读光标是否打开 %rowcount 影响的行数 */ set servero...

PL/SQL用光标查询多条记录

PL/SQL光标为程序提供了从数据库中选择多行数据,然后对每行数据单独进行处理的方法,它为Oracle提供了一种指示和控制SQL处理的各个阶段的方法。我将认为您已经对PL/SQL有一定的了解。通过本文...

PL/SQL中cursor(光标/游标)的用法

显式cursor 显式是相对与隐式cursor而言的,就是有一个明确的声明的cursor.显式游标的声明类似如下(详细的语法参加plsql ref doc ) cursor cursor_...

pl/sql中光标cursor的使用笔记

cursor就是一个结果集,相当于Result,可以从数据库中取出多个纪录。 cursor的使用: 声明:cursor 光标名[(参数名 数据类型 [,参数名 数据类型])]

oracle基础知识2----pl/sql基础(基本语法、光标、例外、应用)

测试数据来源:http://blog.csdn.net/ochangwen/article/details/51297893     PL/SQL(Procedure Language/SQL),是...

【初识Oracle】⑥PL/SQL基础基本程序块以及存储类型

--PL/SQL基础 Procedure Language & Structured Query Language --PL/SQL的基本组成 --声明部分 DECLARE --执行部分 BE...

什么是PL/SQL程序

PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,...

使用PL/SQL Developer 远程连接Oracle数据库出现 “无监听程序“错误 的解决办法

今天在使用PLSQL远程连接ORACLE数据库的时候,突然报错,无监听程序,出现这个错误 我首先第一反应是打开 服务 看了一下 Oracle常用的几个服务是否正常启动,监听服务是否启动,打开发现ORA...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)