PL/SQL游标

PL/SQL游标:
A:分类:
1:隐式游标:非用户明确声明而产生的游标.
你根本看不到cursor这个关键字.
2:显示游标:用户明确通过cursor关键字来声明的游标.

B:什么是隐式游标:
1:什么时候产生:
会在执行任何合法的SQL语句(DML---INSERT
UPDATE DELETE DQL-----SELECT)中产生.他不一定存放数据.也有可能存放记录集所影响的行数.
如果执行SELECT语句,这个时候游标会存放数据.如果执行INSERT
UPDATE DELETE会存放记录影响的行数.
C:隐式游标叫什么名字:
名字叫sql
关于sql的游标变量到底有哪些呢?
作用:返回最近一次执行SQL语句所涉及的游标相关信息.因为每执行一次SQL语句,都会产生一个隐式游标.那么当前执行的SQL语句就是当前的隐式游标.
sql%found
sql%notfound
sql%rowcount
sql%isopen
D:关于隐式游标的例子:

create table
学生基本信息表
(
StuID
int,
StuName
varchar2(20)
)

alter table
学生基本信息表 add constraint PK_STUID primary key(StuID)

declare
num
int:=0;
begin
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||‘%‘;

begin
for line in
query(‘A‘)
loop
dbms_output.put_line(line.empno||‘
‘||line.ename||‘ ‘||line.job);
end
loop;
end;

实现动态输入:
declare
cursor query(vname
varchar) is select empno,ename,job from emp where ename
like‘%‘||vname||‘%‘;

name1
varchar(10);
begin
name1:=upper(‘&name1‘);
for line in
query(name1)
loop
dbms_output.put_line(line.empno||‘
‘||line.ename||‘ ‘||line.job);
end
loop;
end;

时间: 2024-10-05 16:46:55

PL/SQL游标的相关文章

Oracle数据库PL SQL游标

PL SQL游标 将hregright表中不存在hrno的记录,用house表中的hrno填充(house唯一的时候) declare cursor house_cur is select h.regno,h.hrno from house h where h.hrno is not null group by h.regno,h.hrno having count(h.regno)=1; begin for house in house_cur loop update hregright r

PL/SQL 游标 (实验七)

PL/SQL 游标 emp.dept 目标表结构及数据 要求 基于部门表建立游标dept_cursor1,使用记录变量接收游标数据,输出部门表信息: 显示格式: 部 门 号: XXX 部门名称: XXX 所在位置: XXX 基于部门表建立游标dept_cursor2,使用标量变量接收游标数据,输出部门表信息: 显示格式:部门号:XXX 部门名称:XXX 所在位置:XXX 基于雇员表建立游标emp_cursor,根据用户输入的部门号,输出该部门薪水在5000元上的雇员姓名.薪水. 显示格式:雇员姓

PL/SQL 游标的使用详解

一:通过游标,PL/SQL 指向语句被分析以后的活动集 二:对于不同的SQL语句,游标的使用情况不同:1:非查询语句--隐式的2:结果是单行的查询语句--隐式的或显式的3:结果是多行的查询语句--显式的 三:游标属性1:%FOUND 2:%NOTFOUND 3:%ISOPEN 4:%ROWCOUNT 三:显式游标的用法四个步骤(1)定义一个游标名,以及与其相对应的SELECT 语句.语法:CURSOR cursor_name IS select_statement (2)打开游标.语法:OPEN

PL/SQL 游标的使用

 游标的使用 ①游标概念 为了处理SQL 语句,ORACLE 必须分配一片叫上下文( context area )的区域来处理所必需的信息, 当中包含要处理的行的数目.一个指向语句被分析以后的表示形式的指针以及查询的活动集(active set). 游标是一个指向上下文的句柄( handle)或指针. 通过游标,PL/SQL能够控制上下文区和处理语句时上下文区会发生些什么事情 ②显式游标处理 1.显式游标处理需四个PL/SQL步骤: 定义游标:就是定义一个游标名,以及与其相相应的SELECT

Oracle数据库之PL/SQL游标

1. 游标概念 字面意思是游动的光标,是指向上下文区域的句柄或指针. 在PL/SQL块中执行CRUD操作时,ORACLE会在内存中为其分配上下文区.用数据库语言来描述游标就是:映射在上下文区结果集中一行数据上的位置实体. 用户可以使用游标访问结果集中的任意一行数据,将游标指向某行后,即可对该行数据进行操作.游标为应用提供了一种对具有多行数据查询结果集中的每一行数据分别进行单独处理的方法,是设计嵌入式SQL语句的应用程序的常用编程方式. 在每个用户会话中,可以同时打开多个游标,其最大数量由数据库初

PL/SQL 游标详解

刚打开游标的时候,是位于一个空行,要用fetch into 才能到第一行.只是要注意用更新游标的时候,不能在游标期间commit. 否则会报ORA-01002: fetch out of sequence就是COMMIT导致的错误.在打开有for update的cursor时,系统会给取出的数据加上排他锁(exclusive), 这样在这个锁释放前其他用户不能对这些记录作update.delete和加锁.而我一旦执行了commit,锁就释放了,游标也变成无效的,再去fetch数据时就出现错误了.

PL/SQL游标使用

游标只是一个指向查询语句返回的结果的指针,因此在游标定义时将包含一个查询定义.当游标打开后,数据被接收到一块内存区域存储,直到游标关闭. 游标实际上指向的是一块内存区域,这块内存区域位于进程全局区内部,称为上下文区域,在上下文区域中包含如下3类信息 1.查询返回的数据行 2.查询所处理的数据的行号 3.指向共享池中的已分析的SQL语句 游标实际上指向一块内存区域 游标定义时并不会获取游标数据,只有在游标被打开后,游标相关的查询语句被执行,然后将检索到的结果保存到内存中. 游标结构示意图 游标指向

Oracle笔记 九、PL/SQL 游标的使用

--演示隐式游标,系统自动声明,自动打开,自动使用并且自动关闭 begin update emp set sal = 1000; dbms_output.put_line('影响的行数:' || sql%rowcount); end;   rollback;   /*游标的使用方法: 第一步:声明游标 第二步:打开游标 第三步:使用游标进行循环操作 第四步:关闭游标*/   --普通游标,游标本身就是一个变量 declare --下面的这行代码声明了一个游标 cursor mycur is se

PL/SQL游标的使用

游标的使用语法 1).定义游标 declare cursor 游标名 [(参数名 参数类型[,参数名 参数类型])] is select statement; 2)打开游标 if not cursor_name%isopen then open cursor_name; end if; 3)使用游标读取数据 loop fetch cursor_name into variable; exit when cursor_name%notfound; --TODO task statements en