- 浏览: 239706 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
243035985:
顶红色的那段
eclipse增加struts.xml智能提示(绝对能用) -
spiritdyh:
不错!!!
eclipse增加struts.xml智能提示(绝对能用) -
xiarilian12:
lovelimx 写道{myEquipSN:encodeURI ...
以"对象"方式接收json数据.(解决乱码问题) -
xiarilian12:
qiaolevip 写道用不成,应该是版本的问题吧。JSONO ...
以"对象"方式接收json数据.(解决乱码问题) -
qiaolevip:
用不成,应该是版本的问题吧。JSONObject jsonOb ...
以"对象"方式接收json数据.(解决乱码问题)
一. PL/SQL 是用游标来管理 SQL 的 SELECT 语句的 . 游标是为了处理这些语句而分配的一大块内存 . 它提供了对一个结果集进行逐行处理的能力 , 可看作是一种特殊的指针 . 它与某个查询结果集相关联 , 可以指向结果集的任意位置 , 以便对指定位置的数据进行处理 . 使用它可以在查询数据的同时对数据进行处理 .
二. 游标的分类 : 静态游标和动态游标
1. 在说明游标分类之前, 先说明一下PL/SQL 的两个操作, 游标属性, 变量属性
SET SERVEROUTPUT ON ;-- 此语句用于开启打印输出功能
DMBS_OUTPUT.PUT_LINE();-- 打印输出并换行.
%FOUND: 判断当前游标是否指向有效的一条行记录. 是则返回TRUE, 否则返回FALSE
%NOTFOUND: 与%FOUND 恰好相反.
%ISOPEN: 判断游标是否打开, 打开则返回TRUE, 否则返回FALSE.
%ROWCOUNT: 判断当前游标在所指向的结果集中提取的行数. 并非所有总记录数
%TYPE: 声明变量的类型与表中的某列的数据类型完全一致.%TYPE 声明有两个好处: 一是你不必知道某列的确切数据类型二是当某列的数据类型改变时不用修改变量的数据类型.
%ROWTYPE: 声明变量的数据类型与表中的行记录数据类型一致. 对于自定义的记录, 则必须声明自己的域.
2. 静态游标:
静态游标又可以分为两类:
1) 隐式游标
隐式游标的特点:
- 隐式游标是由PL/SQL 来管理的, 即不需要声明游标语句, 也不需要OPEN,FETCH,CLOSE 操作
- 隐式游标中必须要有select cur_name into [ 变量名或其他数据类型]. 此句完成OPEN,FETCH,CLOSE 操作.
- 隐式游标只能返回一行记录, 如果无符合条件的记录将会出现NO_DATA_FOUND 异常. 如果出现多条记录将出现TOO_MANY_ROWS 异常.
- 隐式游标只能用SQL% 判断其游标属性
- 对于任何位置使用SQL%ISOPEN 结果都是FALSE, 隐式游标由PL/SQL 管理
- 对于在隐式游标位置前使用SQL%FOUND 或SQL%NOTFOUND, SQL%ROWCOUNT 结果值是NULL( 不确定值)
示例表:
表名:test
字段名
数据类型
可否为空
id( 序号)
number
N
name( 姓名)
varchar2(20)
N
zym( 专业名)
varchar(40)
Y
cj( 成绩)
number
Y
logdate( 记录日期)
date
Y
EG1: 验证隐式游标的特性
set serveroutput on;-- 开启输出
declare
no test.id%type;-- 声明变量no 的数据类型同test 表的id 列一致
ename test.name%type;
begin
if sql%isopen then -- 判断游标是否打开
dbms_output.put_line(' cursor is openning');
else
dbms_output.put_line('cursor is closed');
end if;
if sql%notfound then – 判断游标是否指向有效的行
dbms_output.put_line('no value');
else
dbms_output.put_line(no||' '||ename);
end if;
dbms_output.put_line(sql%rowcount);
dbms_output.put_line('---------------');
/** 去掉where 条件时, 将会出现too_many_rows 异常**/
select id ,name into no ,ename from test where cj=90;-- 隐式游标必-- 须使用INTO
dbms_output.put_line(sql%rowcount);
if sql%isopen then
dbms_output.put_line(' cursor is openning');
else
dbms_output.put_line('cursor is closed');
end if;
if sql%notfound then
dbms_output.put_line('no value');
else
dbms_output.put_line(no||' '||ename);
end if;
exception
when no_data_found then
dbms_output.put_line('no value');
when too_many_rows then
dbms_output.put_line('too many rows');
end;
执行结果为:
cursor is closed
--------------------
1
cursor is closed
1001 qbnajj
去掉where 条件时的结果:
cursor is closed
--------------------
too many rows
EG2: 使用%ROWTYPE
declare
rowtype test%rowtype;
begin
select * into rowtype from test where cj=90;
dbms_output.put_line(rowtype.name||' '||rowtype.cj);
exception
when no_data_found then
dbms_output.put_line('no value');
when too_many_rows then
dbms_output.put_line('too many rows');
end;
执行结果:
qbnajj 90
EG3: 自定义RECORD 数据类型
declare
/** 自定义RECORD 数据类型
语法为:
TYPE type_name IS RECORD(cloumn1 datatpe,.....);
**/
type r_type is record(name test.name%type ,cj test.cj%type);
re_type r_type;
begin
select name,cj into re_type from test where cj=90;
dbms_output.put_line(re_type.name||' '||re_type.cj);
exception
when no_data_found then
dbms_output.put_line('no value');
when too_many_rows then
dbms_output.put_line('too many rows');
end;
/
执行结果:
qbnajj 90
2) 显示游标
声明语法:
DECLARE
CURSOR cur_name( 参数名 数据类型) is select_satatements ;-- 游标名后-- 可带参数
BEGIN
OPEN cur_name;
FETCH cur_name into [ 变量或者其他数据类型];
-- 可用循环语句迭代输出游标所指向的结果集.
CLOSE cur_name;
END;
显示游标特性:
- 显示游标由用户定义, 并由用户来管理游标, 可返回多行记录.
- 通常使用显示游标需要遵守以下规则
声明游标 -> 打开游标 -> 读取数据 -> 关闭游标
但由于FOR IN LOOP 语句包含OPEN,FETCH,CLOSE 操作所以不在此例.
- 查看游标属性时, 使用cur_name%.
EG:PL/SQL 演示
declare
no test.id%type;
ename test.name%type;
cjs test.cj%type;
cursor test_cur is
select id,name from test where cj>=cjs;-- 可通过PL/SQL 绑定变量输-- 入值(&cjs)
begin
cjs:=50;
for t_cur in test_cur
loop
no:=t_cur.id;
ename:=t_cur.name;
dbms_output.put_line(no||' '||ename);
end loop;
end;
执行结果:
chenjunhua 80
qbnajj 90
cjh 52
EG2: 利用带参数的存储过程演示
create or replace procedure test_proce(cjs in test.cj%type)
as
no test.id%type;
ename test.name%type;
cursor test_cur is
select id,name from test where cj>=cjs;
begin
open test_cur;
fetch test_cur into no,ename;
while test_cur%found
loop
dbms_output.put_line(no||' '||ename);
fetch test_cur into no,ename;-- 将游标指向下条记录, 否则为死循环.
end loop;
close test_cur;
end test_proce;
exec test_proce(50);
执行结果:
chenjunhua 80
qbnajj 90
cjh 52
EG3: 带参数的游标与上面的类似
2. 动态游标(REF CURSOR)
首先 , 游标变量和游标是两个不同的概念 . 与游标相似 , 游标变量是指向多行查游标询的结果集的当前行 . 游标是静态的 , 游标变量是动态的 ,. 同时游标变量并不参与与特定的查询绑定 , 所以可以为任何兼容的查询打开游标变量 , 从而提高灵活性 . 而且 , 还可以将新的值赋予游标变量 , 将它作为参数传递给本地和存储过程 . 游标变量针对每个 PL/SQL 用户都是可用的 , 可以在客户端完全使用游标变量 .ORACLE 服务器同样包含 PL/SQL 引擎 , 可以将游标变量在应用和服务器之间进行传递 .
1. 游标变量 : 声明游标实际上是创建一个指针 , 指针具有数据类型 REF X.REF 是 REFERENCE ,X 是表示类对象 . 因此 , 游标变量具有数据类型 REF CURSOR.
注 : 游标总是指向相同的查询工作区 , 游标变量能够指向不同的工作区 , 因此游标和游标变量不能互操作 .
3. 定义 REF CURSOR 类型 , 创建游标变量有两个步骤 :
1) 定义 REF CURSOR 类型
语法格式 :
TYPE ref_type_name
IS
REF CURSOR [RETURN return_type]
说明 :
ref_type_name 是游标变量中使用的类型 ;return_type 必须是一个记录 (record) 或者数据库表中的一行 .(rowtype)
下面定义 一个 REF CURSOR 类型游标
DELARE
TYPE xs_cur
IS
REF CURSOR RETURN xs%ROWTYPE;
注意 :
REF CURSOR 类型既可以是强类型 , 也可以是弱类型 , 区别是强类型有返回类型 , 弱类型没有 . 如下所示
DECLARE
TYPE xs_cur IS REF CURSOR RETURN xs%ROWTYPE;-- 强类型
TYPE mycur IS REF CURSOR;-- 弱类型
2) 声明这种类型的游标变量 : 一旦定义了 REF CURSOR 类型就可以在 PL/SQL 块或子程序中声明这个游标变量 . 如 :
DECARE
TYPE xs_cur REF CURSOR RETURN xs%ROWTYPE;
xscur xs_cur;
当然 , 在 RETURN 子句中也可以定义自定义的 RECORD 类型 , 如 :
DECLARE
TYPE kc_cj IS RECORD
(
kch number (4),
kcm number(10),
cj number(4,2)
);
TYPE kc_cjcur IS REF CURSOR RETURN kc_cj;
此外 , 也可以声明游标变量作为函数和过程的参数 . 例如 :
DECLARE
TYPE xs_cur IS REF CURSOR RETURN xs%ROWTYPE;
PROCEDURE open_xs (xscur IN OUT xs_cur)IS
......................
3. 控制游标变量
使用游标变量时 , 要遵循以下步骤 :OPEN-FETCH-CLOSE
OPEN 语句与多行查询的游标变量相关联 , 它执行查询 , 标志结果集
语法格式 :
OPEN {cursor_variable|:host_cursor_variable }FOR
{
select_statement|dynamic_string[USING bind_argument[,......]]
}
如 :
IF NOT xscur%ISOPEN THEN
OPEN xscur FOR SELECT * FROM xs;
END IF ;
游标变量同样可以使用游标属性 :%FOUND,%ISOPEN,%ROWTYPE
在使用过程中 , 其他的 OPEN 语句可以为不同的查询打开相同的游标变量 . 因此 , 在重新打开之前 , 不要关闭游标变量 . 可以打开游标 , 并作为参数传递给存储过程 . 如 :
CREATE PACKAGE xs_data AS
...
TYPE xs_cur IS REF CURSOR RETURN xs%ROWTYPE;
RROCEDURE open_xs(xscur IN OUT xs_cur);
END xs_data;
CREATE PACKAGE BODY xs_data AS
...
PROCEDURE open_xs(xscur IN OUT xs_cur)
AS
BEGIN
OPEN xscur FOR SELECT * FROM xs;
END open_xs;
END xs_data;
当声明一个游标变量作为打开游标变量子程序的参数时 , 必须定义 IN OUT 模式 . 也就是说 , 子程序可以将一个打开的游标变量传递给调用者 .
二. 游标的分类 : 静态游标和动态游标
1. 在说明游标分类之前, 先说明一下PL/SQL 的两个操作, 游标属性, 变量属性
SET SERVEROUTPUT ON ;-- 此语句用于开启打印输出功能
DMBS_OUTPUT.PUT_LINE();-- 打印输出并换行.
%FOUND: 判断当前游标是否指向有效的一条行记录. 是则返回TRUE, 否则返回FALSE
%NOTFOUND: 与%FOUND 恰好相反.
%ISOPEN: 判断游标是否打开, 打开则返回TRUE, 否则返回FALSE.
%ROWCOUNT: 判断当前游标在所指向的结果集中提取的行数. 并非所有总记录数
%TYPE: 声明变量的类型与表中的某列的数据类型完全一致.%TYPE 声明有两个好处: 一是你不必知道某列的确切数据类型二是当某列的数据类型改变时不用修改变量的数据类型.
%ROWTYPE: 声明变量的数据类型与表中的行记录数据类型一致. 对于自定义的记录, 则必须声明自己的域.
2. 静态游标:
静态游标又可以分为两类:
1) 隐式游标
隐式游标的特点:
- 隐式游标是由PL/SQL 来管理的, 即不需要声明游标语句, 也不需要OPEN,FETCH,CLOSE 操作
- 隐式游标中必须要有select cur_name into [ 变量名或其他数据类型]. 此句完成OPEN,FETCH,CLOSE 操作.
- 隐式游标只能返回一行记录, 如果无符合条件的记录将会出现NO_DATA_FOUND 异常. 如果出现多条记录将出现TOO_MANY_ROWS 异常.
- 隐式游标只能用SQL% 判断其游标属性
- 对于任何位置使用SQL%ISOPEN 结果都是FALSE, 隐式游标由PL/SQL 管理
- 对于在隐式游标位置前使用SQL%FOUND 或SQL%NOTFOUND, SQL%ROWCOUNT 结果值是NULL( 不确定值)
示例表:
表名:test
字段名
数据类型
可否为空
id( 序号)
number
N
name( 姓名)
varchar2(20)
N
zym( 专业名)
varchar(40)
Y
cj( 成绩)
number
Y
logdate( 记录日期)
date
Y
EG1: 验证隐式游标的特性
set serveroutput on;-- 开启输出
declare
no test.id%type;-- 声明变量no 的数据类型同test 表的id 列一致
ename test.name%type;
begin
if sql%isopen then -- 判断游标是否打开
dbms_output.put_line(' cursor is openning');
else
dbms_output.put_line('cursor is closed');
end if;
if sql%notfound then – 判断游标是否指向有效的行
dbms_output.put_line('no value');
else
dbms_output.put_line(no||' '||ename);
end if;
dbms_output.put_line(sql%rowcount);
dbms_output.put_line('---------------');
/** 去掉where 条件时, 将会出现too_many_rows 异常**/
select id ,name into no ,ename from test where cj=90;-- 隐式游标必-- 须使用INTO
dbms_output.put_line(sql%rowcount);
if sql%isopen then
dbms_output.put_line(' cursor is openning');
else
dbms_output.put_line('cursor is closed');
end if;
if sql%notfound then
dbms_output.put_line('no value');
else
dbms_output.put_line(no||' '||ename);
end if;
exception
when no_data_found then
dbms_output.put_line('no value');
when too_many_rows then
dbms_output.put_line('too many rows');
end;
执行结果为:
cursor is closed
--------------------
1
cursor is closed
1001 qbnajj
去掉where 条件时的结果:
cursor is closed
--------------------
too many rows
EG2: 使用%ROWTYPE
declare
rowtype test%rowtype;
begin
select * into rowtype from test where cj=90;
dbms_output.put_line(rowtype.name||' '||rowtype.cj);
exception
when no_data_found then
dbms_output.put_line('no value');
when too_many_rows then
dbms_output.put_line('too many rows');
end;
执行结果:
qbnajj 90
EG3: 自定义RECORD 数据类型
declare
/** 自定义RECORD 数据类型
语法为:
TYPE type_name IS RECORD(cloumn1 datatpe,.....);
**/
type r_type is record(name test.name%type ,cj test.cj%type);
re_type r_type;
begin
select name,cj into re_type from test where cj=90;
dbms_output.put_line(re_type.name||' '||re_type.cj);
exception
when no_data_found then
dbms_output.put_line('no value');
when too_many_rows then
dbms_output.put_line('too many rows');
end;
/
执行结果:
qbnajj 90
2) 显示游标
声明语法:
DECLARE
CURSOR cur_name( 参数名 数据类型) is select_satatements ;-- 游标名后-- 可带参数
BEGIN
OPEN cur_name;
FETCH cur_name into [ 变量或者其他数据类型];
-- 可用循环语句迭代输出游标所指向的结果集.
CLOSE cur_name;
END;
显示游标特性:
- 显示游标由用户定义, 并由用户来管理游标, 可返回多行记录.
- 通常使用显示游标需要遵守以下规则
声明游标 -> 打开游标 -> 读取数据 -> 关闭游标
但由于FOR IN LOOP 语句包含OPEN,FETCH,CLOSE 操作所以不在此例.
- 查看游标属性时, 使用cur_name%.
EG:PL/SQL 演示
declare
no test.id%type;
ename test.name%type;
cjs test.cj%type;
cursor test_cur is
select id,name from test where cj>=cjs;-- 可通过PL/SQL 绑定变量输-- 入值(&cjs)
begin
cjs:=50;
for t_cur in test_cur
loop
no:=t_cur.id;
ename:=t_cur.name;
dbms_output.put_line(no||' '||ename);
end loop;
end;
执行结果:
chenjunhua 80
qbnajj 90
cjh 52
EG2: 利用带参数的存储过程演示
create or replace procedure test_proce(cjs in test.cj%type)
as
no test.id%type;
ename test.name%type;
cursor test_cur is
select id,name from test where cj>=cjs;
begin
open test_cur;
fetch test_cur into no,ename;
while test_cur%found
loop
dbms_output.put_line(no||' '||ename);
fetch test_cur into no,ename;-- 将游标指向下条记录, 否则为死循环.
end loop;
close test_cur;
end test_proce;
exec test_proce(50);
执行结果:
chenjunhua 80
qbnajj 90
cjh 52
EG3: 带参数的游标与上面的类似
2. 动态游标(REF CURSOR)
首先 , 游标变量和游标是两个不同的概念 . 与游标相似 , 游标变量是指向多行查游标询的结果集的当前行 . 游标是静态的 , 游标变量是动态的 ,. 同时游标变量并不参与与特定的查询绑定 , 所以可以为任何兼容的查询打开游标变量 , 从而提高灵活性 . 而且 , 还可以将新的值赋予游标变量 , 将它作为参数传递给本地和存储过程 . 游标变量针对每个 PL/SQL 用户都是可用的 , 可以在客户端完全使用游标变量 .ORACLE 服务器同样包含 PL/SQL 引擎 , 可以将游标变量在应用和服务器之间进行传递 .
1. 游标变量 : 声明游标实际上是创建一个指针 , 指针具有数据类型 REF X.REF 是 REFERENCE ,X 是表示类对象 . 因此 , 游标变量具有数据类型 REF CURSOR.
注 : 游标总是指向相同的查询工作区 , 游标变量能够指向不同的工作区 , 因此游标和游标变量不能互操作 .
3. 定义 REF CURSOR 类型 , 创建游标变量有两个步骤 :
1) 定义 REF CURSOR 类型
语法格式 :
TYPE ref_type_name
IS
REF CURSOR [RETURN return_type]
说明 :
ref_type_name 是游标变量中使用的类型 ;return_type 必须是一个记录 (record) 或者数据库表中的一行 .(rowtype)
下面定义 一个 REF CURSOR 类型游标
DELARE
TYPE xs_cur
IS
REF CURSOR RETURN xs%ROWTYPE;
注意 :
REF CURSOR 类型既可以是强类型 , 也可以是弱类型 , 区别是强类型有返回类型 , 弱类型没有 . 如下所示
DECLARE
TYPE xs_cur IS REF CURSOR RETURN xs%ROWTYPE;-- 强类型
TYPE mycur IS REF CURSOR;-- 弱类型
2) 声明这种类型的游标变量 : 一旦定义了 REF CURSOR 类型就可以在 PL/SQL 块或子程序中声明这个游标变量 . 如 :
DECARE
TYPE xs_cur REF CURSOR RETURN xs%ROWTYPE;
xscur xs_cur;
当然 , 在 RETURN 子句中也可以定义自定义的 RECORD 类型 , 如 :
DECLARE
TYPE kc_cj IS RECORD
(
kch number (4),
kcm number(10),
cj number(4,2)
);
TYPE kc_cjcur IS REF CURSOR RETURN kc_cj;
此外 , 也可以声明游标变量作为函数和过程的参数 . 例如 :
DECLARE
TYPE xs_cur IS REF CURSOR RETURN xs%ROWTYPE;
PROCEDURE open_xs (xscur IN OUT xs_cur)IS
......................
3. 控制游标变量
使用游标变量时 , 要遵循以下步骤 :OPEN-FETCH-CLOSE
OPEN 语句与多行查询的游标变量相关联 , 它执行查询 , 标志结果集
语法格式 :
OPEN {cursor_variable|:host_cursor_variable }FOR
{
select_statement|dynamic_string[USING bind_argument[,......]]
}
如 :
IF NOT xscur%ISOPEN THEN
OPEN xscur FOR SELECT * FROM xs;
END IF ;
游标变量同样可以使用游标属性 :%FOUND,%ISOPEN,%ROWTYPE
在使用过程中 , 其他的 OPEN 语句可以为不同的查询打开相同的游标变量 . 因此 , 在重新打开之前 , 不要关闭游标变量 . 可以打开游标 , 并作为参数传递给存储过程 . 如 :
CREATE PACKAGE xs_data AS
...
TYPE xs_cur IS REF CURSOR RETURN xs%ROWTYPE;
RROCEDURE open_xs(xscur IN OUT xs_cur);
END xs_data;
CREATE PACKAGE BODY xs_data AS
...
PROCEDURE open_xs(xscur IN OUT xs_cur)
AS
BEGIN
OPEN xscur FOR SELECT * FROM xs;
END open_xs;
END xs_data;
当声明一个游标变量作为打开游标变量子程序的参数时 , 必须定义 IN OUT 模式 . 也就是说 , 子程序可以将一个打开的游标变量传递给调用者 .
发表评论
-
数据库分页语句(mysql,oracle,sqlserver,DB2)
2010-12-29 22:32 1593mysql: 引用 select * from ... -
oracle常用操作
2010-12-29 22:30 1114创建表空间 create tablespace 表空间 ... -
oracle 函数整理(一)
2010-12-29 22:28 9411. ASCII: 返回与指定的字 ... -
不装Oracle使用PL/SQL
2010-07-22 17:36 1552Sql客户端中,虽然最便捷的是万能而且轻量无比的Sql Wor ... -
DBA最佳实践
2010-04-18 17:11 948就我而言,最佳实 ... -
set autotrace on
2010-04-18 16:42 1951在SQL*Plus中,你可以通 ... -
oracle分析函数
2010-04-18 16:36 920分析函数是oracle816引入的一个全新的概念,为我们分析数 ... -
在oracle中通过connect by prior来实现递归查询!
2010-02-25 13:26 1431connect by 是结构化查询 ... -
深入了解start with .....connect by (一)
2010-02-25 11:50 1134START WITH . . . CONNECT BY . . ... -
手工备份恢复--导入导出(练习15.16.17)
2010-02-25 11:23 1615到目前为止介绍的备份 ... -
行转列
2010-02-25 09:24 10161. 概述 最近论坛很多人提的问题都与行列转换有关系,所以我对 ... -
Oracle SQL精妙SQL语句讲解
2010-02-20 12:46 1003DROP TABLE t_change_lc; CREATE ... -
oracle OOP
2010-02-20 12:00 1061关系数据库在不断地发展时,许多数据库引入了面向对象的思想,这其 ... -
存储过程
2010-02-20 11:44 788存储过程创建语法: create or rep ... -
Oracle SQL的优化
2010-02-15 12:15 815SQL的优化应该从5个方面进行调整: 1.去掉不必要的大型表的 ... -
oracle 游标以及游标变量(二)
2010-01-19 13:39 3836环境区域是用来处理SQL语句的一个oracle存储区域。游标是 ... -
oracle查看锁表进程,杀掉锁表进程
2010-01-15 17:57 66058查看锁表进程SQL语句1: select sess.sid, ... -
ORACLE ERROR CODE代表的意思
2009-10-23 19:26 2007标准的 SQLException 提供了一个标准化的信息段 ( ...
相关推荐
oracle游标变量和数据包
本文将介绍利用使用表变量和游标实现数据库中表的遍历。 表变量来实现表的遍历 以下代码中,代码块之间的差异已经用灰色的背景标记。 代码如下: DECLARE @temp TABLE ( [id] INT IDENTITY(1, 1) , [Name] VARCHAR(10...
我将在这里解释如何使用表变量以及克服游标限制
Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或...
显式游标的用法 声明游标 CURSOR 游标名 IS SELECT语句FROM语句; 打开游标 OPEN 游标名; 提取游标 FETCH 游标名 INTO 变量列表; 关闭游标 CLOSE 游标名; 完整示例
sql server 游标 使用的使用方法 ...FETCH会执行两步操作:首先将游标当前指向的记录保存到一个局部变量中, --然后游标将自动移向下一条记录) --将一条或多条记录读入某个局部变量后,就可以根据需要对其进行处理了
在PL/SQL中可以使用游标处理数据。通过使用游标可以大大提高PL/SQL程序对数据...本章将主要介绍如何使用显式游标进行多行数据的查询、游标FOR循环以及游标变量的使用,另外还将介绍游标属性以及嵌套游标的使用等内容。
当时自己初学SQL时,对游标很难理解,现在编写了一个实例游标循环,到时写...fetch next from cursor1 into @id,@name -- 定义一个游标有两个变量 while @@fetch_status=0 --返回值成功的时候循环 以上是我个人的理解
利用递归再将此下属的下属插入返回表 遍历游标 ,并进行递归 使用游标变量
sql不用游标实现逐行处理 一个Insert语句一次插入3行到某个表中。触发器需要从Inserted表中读取每一行的主键送到另一个存储过程去处理。...但在这种情况我们可以使用一个技巧:变量以及动态SQL语言。
使用http通道方式远程连接数据库,http通道数据库连接文件。
declare @Number varchar(100) --定义变量物料代码 declare @qty decimal(18,6) --定义变量数量 declare @SPID int --定义变量仓位代码 declare @BatchNo varchar(100) --定义变量批号 declare @DID int declare @...
第16章_变量、流程控制与游标.sql
#第16章_变量、流程控制与游标.sql
文章目录游标1.1 显式游标1.1.1 创建游标1.1.2 打开游标1.1.3 获取数据1.1.4 关闭游标1.1.5 使用实例1.2 隐式游标1.2.2 游标属性1.3 FOR游标1.4 游标变量1.4 游标表达式1.5 动态游标 游标 游标是一个指针,指向一块...
第16章_变量、流程控制与游标讲师:尚硅谷-宋红康(江湖人称:康师傅)1. 变量在MySQL数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据
第16章_变量、流程控制与游标讲师:尚硅谷-宋红康(江湖人称:康师傅)1. 变量在MySQL数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据