请问oracle动态游标和静态游标最大的区别是什么啊,谢谢
发布网友
发布时间:2022-04-26 05:26
我来回答
共4个回答
懂视网
时间:2022-05-01 19:18
REF CURSOR; --定义一个动态游标
游标名 游标类型;
如果查询的表的数据不同的,动态变化的,这时候可以用动态游标。
需要注意的是,动态游标的定义,
在普通存储过程中:需要放在 is 后面的第一行。
动态游标通过:open 游标 for 字符串,形式使用,遍历。
create or replace procedure P_TEST_SQL
is
TYPE ref_cursor_type IS REF CURSOR; --定义一个动态游标
tablename varchar2(200) default ‘ess_client‘;
v_sql varchar2(1000);
mobile varchar2(15);
usrs ref_cursor_type;
begin
--使用连接符拼接成一条完整SQL
v_sql := ‘select usrmsisdn from ‘||tablename||‘ where rownum < 11‘;
--打开游标
open usrs for v_sql ;
loop
fetch usrs into mobile;
exit when usrs%notfound;
insert into tmp(usrmsisdn) values(mobile);
end loop;
close usrs;
commit;
end P_TEST_SQL;
下面是一个自己做过的一个实例,代码只保留了可参考部分。
create or replace procedure DDGZ1--订单跟踪
(
P_flag varchar,--订单类型
P_operate varchar,--操作类型
P_BH varchar --传入的编号ID
)
is
TYPE ref_cursor_type IS REF CURSOR;
v_cur_CKD ref_cursor_type;
begin
open v_cur_CKD for ‘select v_ERP,v_DRP,v_jxsmc,v_jxs,v_DWMC,v_czr,v_jlsj from tmp_DDGZ1‘;
fetch v_cur_CKD into v_ERP,v_DRP,v_jxsmc,v_jxs,v_DWMC,v_czr,v_jzsj;
while v_cur_CKD%found
loop
insert into DRPDDGZJL2 (JLID,DRP,ERP,JXS,JXSMC,JLSJ,GZJL,CZR,BHID) values(SYS_GUID(),v_drp,v_erp,v_jxs,v_jxsmc,v_jzsj,v_DWMC||‘受托代销成品库接收订单,组织发货‘,v_CZR,‘出库单‘||P_BH);
fetch v_cur_CKD into v_ERP,v_DRP,v_jxsmc,v_jxs,v_DWMC,v_czr,v_jzsj;
end loop;
close v_cur_CKD;
end;
而对于包头包体的存储过程。经常是如下形式:
在包头中:
CREATE OR REPLACE PACKAGE BIA_FYJSDCX
is --发运结算单查询
type T_CURSOR is ref cursor;
procedure ERP_HY_FYJSDCX
(
Re_CURSOR out T_CURSOR
);
end BIA_FYJSDCX;
包体中:
procedure ERP_HY_FYJSDCX
(
Re_CURSOR out T_CURSOR
)
begin
v_sql:=‘select * from T_FYJSDCX4‘;
Open Re_CURSOR For v_sql;
end;
Oracle动态游标实现动态SQL循环遍历,和静态游标的比较。
标签:数据 静态 字符串 strong 保留 遍历 存储 nbsp into
热心网友
时间:2022-05-01 16:26
静态游标指的是程序执行的时候不需要再去解析sql语言,对于sql语句的解析在编译的时候就可以完成的。动态游标由于含有参数,对于sql语句的解析必须要等到参数确定的时候才能完成。从这个角度来说,静态游标的效率也比动态游标更高一些。
热心网友
时间:2022-05-01 17:44
静态游标就是自己定义游标名自己用或者用系统给出的名称(sql);
动态游标则是调用别人的游标,B去调用A中定义的游标。。。。
热心网友
时间:2022-05-01 19:19
最接近正确答案的却被点踩。
上边airson79那个屎一样的回答,前半句说的是软解析,后半句说的是绑定变量。oracle静态动态游标的区别就是静态游标时声明之初就已经知道结果的,例如静态SQL执行时的隐式游标,或者使用静态SQL声明的游标。
动态游标指声明时结果集不确定的,一般也就是用于调用其他的游标的,例如用于引用静态游标的sys_refcursor或者使用ref cursor类型的游标(无论之后使用静态还是动态SQL定义)。
除了引用静态游标的sys_refcursor类型的动态游标外,一般的动态游标的定义语法都是:
TYPE 游标类型 IS REF CURSOR; --定义一个动态游标类型
游标名 游标类型; --正式声明一个动态游标
数据库里面静态游标包含哪两种类型?
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。Oracle数据库的Cursor类型包含三种: 静态游标:分为显式(explicit)游标和隐式(implicit)游标;REF游标:是一种引用类型,类似于指针。下面我们一一介绍它们的使用。1.隐式游标 1)Select ...
oracle如何让游标的指针置0
在Oracel中,游标可以分为两大类:静态游标 和 REF游标(动态游标)。REF游标是一种引用类型,类似于指针。而静态游标又分为显式游标和隐式游标两种。 结构图如下: |--隐式游标:系统自动定义的游标,用于处理select into 和DML语句。 |---静态游标---| Oracle游标---| |--显式游标:即用户自定义游标,专门用于...
oracle游标和游标变量的区别?
oracle游标是数据库中一个命名的工作区,当游标被声明后,他就与一个固定的SQL想关联,在编译时刻是已知的,是静态的.它永远指向一个相同的查询工作区.游标变量可以在运行时刻与不同的SQL语句关联,在运行时可以取不同的SQL语句.它可以引用不同的工作区.oracle游标和游标变量是不能相互代替的.如何定义游标...
游标详细资料大全
当你在一个文本框或某种程式中输入文字时,总有一个游标来显示你将要输入文字的位置。现在大部分的游标都为一个小竖线,规则的闪动.而在DOS下有些游标则是短短的小横线,同样规则的闪动.现用的windows游标是一个图像,可以是动态的也可以是静态的,在不同情况下样子也不同。基本介绍 中文名 :游标...
光标是什么 关于光标的简介
命令隐式的声明一个光标。2、当你在一个文本框或某种程序中输入文字时,总有一个光标来显示你将要输入文字的位置。大部分的光标都为一个小竖线,规则的闪动.而在DOS下有些光标则是短短的小横线,同样规则的闪动.现用的windows光标是一个图像,可以是动态的也可以是静态的,在不同情况下样子也不同。
java面试必备基础知识篇?
82.客户端游标与服务器端游标的区别? 83.动态游标与静态游标的区别? 84.dotnet由哪几个基本框架组成? 85.Oracle中SGA是什么? 86.webservers是什么? 87.UNIX中QT是什么意思? 88.在软件开发生命周期中的哪个阶段开始测试? 89.dotnet与J2EE的比较? 90.什么是ActiveX? 91.Java中IDL是什么? 92.ISO9000和CMM是什...
光标是什么 关于光标的简介
比如UPDATE、DELETE和INSERT。2. 当您在文本框或程序中输入文本时,总会有一个光标显示您要在哪里输入文本。大多数游标是一条小的垂直线,有规律地闪烁。在DOS中,一些游标是短的水平线,有规律地闪烁。当前的Windows光标是一个图像,可以是动态的,也可以是静态的,在不同的情况下看起来也不同。
数据库中游标的作用是什么?
游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标可以被看作是一个查询结果集和结果集中指向特定记录的游标位置组成的一个临时文件,提供了在查询结果集中向前或向后浏览数据、处理结果集中数据的能力。有了游标,用户就可以访问结果集中任意一行数据,在将游标放置到某行之后,...
oracle pl/sql中如何使用变量
1.REF CURSOR,定义时同时指定SELECT语句的游标称为显式或者静态游标,在打开时才指定SELECT语句的游标称为动态游标,如:DECLARE TYPE c1 IS REF CURSOR ;emp_cursor c1;v_name employee.name % TYPE;v_sal employee.salary % TYPE;begin open emp_cursor for SELECT name,salary FROM ...
sql 让一个静态的游标变成动态的游标 order by排序问题
定义游标使用:SCROLL 指定所有的提取选项(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE)均可用。如果未在 ISO DECLARE CURSOR 中指定 SCROLL,则 NEXT 是唯一支持的提取选项。