最近刚接触oracle 关于游标的使用,有些疑惑,
create or replace package system.pkg_Test
as
type my_rc_type is ref cursor;
end pkg_Testcreate or replace procedure system.pro_Test
(
p_cursor out system.pkg_test.my_rc_type,
p_isectorid in number
)
is
begin
open p_cursor for
select
[*]
from
[表名]
where
[条件];
end system.pro_Test;在调用此存储过程获取p_cursor 数据以后,不知道p_cursor 是否会被关闭掉,或者说不知道怎么去关闭掉,
还有在多个用户操作此存储过程时,游标会不会影响速度,还有是否需要为每一个存储过程定义一个游标,
如果p_cursor 需要关闭,那么在程序调用完毕此存储过程之后如何关闭游标,望大家不吝赐教
create or replace package system.pkg_Test
as
type my_rc_type is ref cursor;
end pkg_Testcreate or replace procedure system.pro_Test
(
p_cursor out system.pkg_test.my_rc_type,
p_isectorid in number
)
is
begin
open p_cursor for
select
[*]
from
[表名]
where
[条件];
end system.pro_Test;在调用此存储过程获取p_cursor 数据以后,不知道p_cursor 是否会被关闭掉,或者说不知道怎么去关闭掉,
还有在多个用户操作此存储过程时,游标会不会影响速度,还有是否需要为每一个存储过程定义一个游标,
如果p_cursor 需要关闭,那么在程序调用完毕此存储过程之后如何关闭游标,望大家不吝赐教
解决方案 »
- txt导入到oracle?
- oracle怎么将select结果发送到制定邮件
- Oracle clob问题
- 有谁知道oracle的主键信息存在哪个表里了?急!!!!!!!!!!
- 更新SQL不會寫,麻煩各位幫忙
- 如何设置数值字段值自动递增
- 如何在硬盘上安装oracle9.2.04 for linux
- 怎样将库中方案下自带的SH, SCOTT, HR等删除, 并建一个新的类似它们的东西。
- @@@@@@@@@@@@@请问在oracle中如何实现全文检索,比如检索表中的某个字段值是否包含‘中国’这个词,该字段为BLOB型,谢谢!
- 在oracle中,能不能只备份1张表?
- insert into 表(字段) select 字段 from 表,出现ORA-00997: illegal use of LONG datatype
- strat with 与 where 的执行顺序问题
操作游标比较好执行关闭都有
cursor1 INTEGER;
BEGIN
cursor1 := dbms_sql.open_cursor;
dbms_sql.parse(cursor1, 'CREATE TABLE ' || tablename || ' ( ' || cols || ' )', dbms_sql.v7);
dbms_sql.close_cursor(cursor1);
end;
1定义REF CURSOR和变量 type .. ref cursor
2打开游标 ; open .. for
3提取游标数据;fetch into..
4关闭游标; close ..
所以你那存储过程只是定义和打开。还没有提取游标数据,等提取完毕后使用close ..可以关闭游标
CREATE OR REPLACE PACKAGE PKG_TEST AS
TYPE MY_RC_TYPE IS REF CURSOR;
END PKG_TEST;
/CREATE OR REPLACE PROCEDURE PRO_TEST(P_CURSOR OUT PKG_TEST.MY_RC_TYPE,
P_ISECTORID IN NUMBER) IS
BEGIN
OPEN P_CURSOR FOR
SELECT ENAME FROM SCOTT.EMP;
END PRO_TEST;
/DECLARE
l_v VARCHAR2(100);
l_c PKG_TEST.MY_RC_TYPE;
BEGIN
pro_test(l_c,1);
LOOP
FETCH l_c INTO l_v;
EXIT WHEN l_c%NOTFOUND;
dbms_output.put_line(l_V);
END LOOP;
CLOSE l_c;
END;
/输出:
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER