oracle如何删除游标 oracle报无效的游标-成都快上网建站

oracle如何删除游标 oracle报无效的游标

Oracle查看和修改其最大的游标数

以下的文章主要是介绍Oracle ;查看和修改其最大的游标数 本文主要是通过相关代码的方式来引出Oracle查看和修改其最大的游标数的实际操作步骤 以下就是文章的具体内容的描述 望你在浏览完之后 会有所收获

创新互联公司专业为企业提供卧龙网站建设、卧龙做网站、卧龙网站设计、卧龙网站制作等企业网站建设、网页设计与制作、卧龙企业网站模板建站服务,十余年卧龙做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

Oracle查看Oracle最大游标数

C:\Documents and Settings\Administratorsqlplus sys/admin@test as sysdba

(sys以dba登录test 服务)

SQL*Plus: Release Production on 星期四 月 : :

Copyright (c) Oracle Corporation All rights reserved

连接到:

Oracle i Enterprise Edition Release Production

With the Partitioning OLAP and Oracle Data Mining options

JServer Release Production

SQL show parameter open_cursors;

NAME TYPE VALUE

open_cursors integer

Oracle查看当前打开的游标数目

SQL select count(*) from v$open_cursor;

COUNT(*)

修改Oracle最大游标数

SQL alter system set open_cursors= scope=both;

系统已更改

SQL show parameter open_cursors;

NAME TYPE VALUE

open_cursors integer

lishixinzhi/Article/program/Oracle/201311/18528

oracle中的游标问题

declare

cursor bb(depno number) is select deptno from emp where deptno=depno for update;

BEGIN

for v_current in bb(30) loop

delete from emp where current of bb;

end loop;

end;

/

试试这个

oracle中有一张A表,如下图,现在要求用存储过程和游标把重复的ID删掉,保留一条最大的ID,应该怎么写?

"把重复的ID删掉,保留一条最大的ID"

这句话有问题,id有重复,就是有一样的,怎么在保留最大的。

明白了,这样写:

CREATE OR REPLACE PROCEDURE test_pro(v_khlx IN VARCHAR2,

v_message out varchar2) is

TYPE TCUR IS REF CURSOR;

cur TCUR;

v_id varchar2(1000);

v_fp_dm varchar2(1000);

v_fp_hm varchar2(1000);

BEGIN

open cur for ' select max(fp_id),fp_dm,fp_hm from a_test group by fp_dm,fp_hm';

loop

fetch cur

into v_id,v_fp_dm,v_fp_hm ;

exit when cur%notfound;

delete from a_test t where t.fp_dm = v_fp_dm and t.fp_hm = v_fp_hm and t.fp_id != v_id ;

end loop;

close cur;

commit;

dbms_output.put_line('');

END;

oracle中游标的使用?

这样的问法好笼统,不过,还是把我整理的给你看看吧~个人整理,无复制的哦~

A:分类:

1:隐式游标:非用户明确声明而产生的游标. 你根本看不到cursor这个关键字.

2:显示游标:用户明确通过cursor关键字来声明的游标.

3:引用游标:

B:什么是隐式游标:

1:什么时候产生:

会在执行任何合法的SQL语句中产生.他不一定存放数据.也有可能存放记录集所影响的行数.

如果执行SELECT语句,这个时候游标会存放数据.如果执行INSERT、UPDATE、 DELETE会存放记录影响的行数.

C:隐式游标叫什么名字:

名字叫sql

关于sql的游标变量到底有哪些呢?

作用:返回最近一次执行SQL语句所涉及的游标相关信息.因为每执行一次SQL语句,都会产生一个隐式游标.那么当前执行的SQL语句就是当前的隐式游标.

sql%found

sql%notfound

sql%rowcount

sql%isopen

D:关于隐式游标的例子:

create table 学生基本信息表

(

StuID number(2),

StuName varchar2(20)

)

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

declare

num number:=0;

begin

num:=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||'%';

三种游标的例子:

--

DECLARE

CURSOR TEST_CUR IS

SELECT * FROM EMP;

MY_CUR EMP%ROWTYPE;

BEGIN

OPEN TEST_CUR;

FETCH TEST_CUR INTO MY_CUR;

WHILE TEST_CUR%FOUND

LOOP

DBMS_OUTPUT.PUT_LINE(MY_CUR.EMPNO||','||MY_CUR.ENAME);

FETCH TEST_CUR INTO MY_CUR;

END LOOP;

CLOSE TEST_CUR;

END;

--

DECLARE

CURSOR TEST_CUR IS

SELECT * FROM EMP;

BEGIN

FOR MY_CUR IN TEST_CUR

LOOP

DBMS_OUTPUT.PUT_LINE(MY_CUR.EMPNO||','||MY_CUR.ENAME);

END LOOP;

END;

--

DECLARE

CURSOR TEST_CUR(V_SAL NUMBER) IS

SELECT *

FROM EMP

WHERE SAL V_SAL;

V_SAL1 NUMBER ;

BEGIN

V_SAL1 := 2000;

FOR MY_CUR IN TEST_CUR(V_SAL1)

LOOP

DBMS_OUTPUT.PUT_LINE(MY_CUR.EMPNO||','||MY_CUR.ENAME);

END LOOP;

END;

Oracle的游标查询问题+清楚table中数据的方法

TRUNCATE TABLE速度更快,不备份日志

DELETE FROM TABLE + COMMIT ,速度稍慢,备份日志

两者都是删除表内容不删除表结构。

oracle游标的使用问题

应该是这样的,因为没有环境,没测试,你试下。

CREATE OR REPLACE PROCEDURE PRC_XXX() AS

C SYS_REFCURSOR;

TP INTEGER;

BEGIN

OPEN C FOR

SELECT TOYPRICE

FROM TOYS; --取出主键和toyprice字段值

LOOP

FETCH C

INTO TP; --最好是把主键一起取出来,作为删除和更新的条件

EXIT WHEN CURSOR%NOTFOUND;

IF TP 150

THEN

UPDATE TOYS

SET TOYPRICE = 150

WHERE TOYPRICE = TP;

ELSE

IF TP 200

THEN

DBMS_OUTPUT.PUTLINE(TP);

ELSE

IF TP 300

THEN

DELETE FROM TOYS

WHERE TOYPRICE = TP;

END IF;

END IF;

END IF;

END LOOP;

COMMIT;

CLOSE C;

END PRC_XXX;


分享名称:oracle如何删除游标 oracle报无效的游标
文章位置:http://kswjz.com/article/hghjio.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流