以下的文章主要是介紹Oracle ;查看和修改其最大的游標(biāo)數(shù) 本文主要是通過相關(guān)代碼的方式來引出Oracle查看和修改其最大的游標(biāo)數(shù)的實(shí)際操作步驟 以下就是文章的具體內(nèi)容的描述 望你在瀏覽完之后 會有所收獲
創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供臥龍網(wǎng)站建設(shè)、臥龍做網(wǎng)站、臥龍網(wǎng)站設(shè)計、臥龍網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、臥龍企業(yè)網(wǎng)站模板建站服務(wù),十余年臥龍做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
Oracle查看Oracle最大游標(biāo)數(shù)
C:\Documents and Settings\Administratorsqlplus sys/admin@test as sysdba
(sys以dba登錄test 服務(wù))
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查看當(dāng)前打開的游標(biāo)數(shù)目
SQL select count(*) from v$open_cursor;
COUNT(*)
修改Oracle最大游標(biāo)數(shù)
SQL alter system set open_cursors= scope=both;
系統(tǒng)已更改
SQL show parameter open_cursors;
NAME TYPE VALUE
open_cursors integer
lishixinzhi/Article/program/Oracle/201311/18528
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;
/
試試這個
"把重復(fù)的ID刪掉,保留一條最大的ID"
這句話有問題,id有重復(fù),就是有一樣的,怎么在保留最大的。
明白了,這樣寫:
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;
這樣的問法好籠統(tǒng),不過,還是把我整理的給你看看吧~個人整理,無復(fù)制的哦~
A:分類:
1:隱式游標(biāo):非用戶明確聲明而產(chǎn)生的游標(biāo). 你根本看不到cursor這個關(guān)鍵字.
2:顯示游標(biāo):用戶明確通過cursor關(guān)鍵字來聲明的游標(biāo).
3:引用游標(biāo):
B:什么是隱式游標(biāo):
1:什么時候產(chǎn)生:
會在執(zhí)行任何合法的SQL語句中產(chǎn)生.他不一定存放數(shù)據(jù).也有可能存放記錄集所影響的行數(shù).
如果執(zhí)行SELECT語句,這個時候游標(biāo)會存放數(shù)據(jù).如果執(zhí)行INSERT、UPDATE、 DELETE會存放記錄影響的行數(shù).
C:隱式游標(biāo)叫什么名字:
名字叫sql
關(guān)于sql的游標(biāo)變量到底有哪些呢?
作用:返回最近一次執(zhí)行SQL語句所涉及的游標(biāo)相關(guān)信息.因?yàn)槊繄?zhí)行一次SQL語句,都會產(chǎn)生一個隱式游標(biāo).那么當(dāng)前執(zhí)行的SQL語句就是當(dāng)前的隱式游標(biāo).
sql%found
sql%notfound
sql%rowcount
sql%isopen
D:關(guān)于隱式游標(biāo)的例子:
create table 學(xué)生基本信息表
(
StuID number(2),
StuName varchar2(20)
)
alter table 學(xué)生基本信息表 add constraint PK_STUID primary key(StuID)
declare
num number:=0;
begin
num:=num;
delete from 學(xué)生基本信息表 where StuID=num;
if sql%notfound then
dbms_output.put_line('該行數(shù)據(jù)沒有發(fā)現(xiàn)');
else
dbms_output.put_line('數(shù)據(jù)被發(fā)現(xiàn)并刪除,影響的行數(shù)為:'||sql%rowcount);
end if;
end;
E:關(guān)于顯示游標(biāo)的例子:
1:如何定義顯示游標(biāo)
declare cursor cursor_name is [select語句];
declare cursor mycur is select empno,ename,job from scott.emp;
2:如何打開游標(biāo):
open cursor_name;
open mycur;
3:如何通過游標(biāo)來讀取數(shù)據(jù)
fetch cursor_name into variable_list
4:如何關(guān)閉游標(biāo):
close cursor_name;
close mycur;
注意:在Oracle中,不需要顯示銷毀游標(biāo).因?yàn)樵贠racle中,很多東西是由JAVA寫的.Oracle會自動銷毀游標(biāo).
5:舉例:
declare
cursor mycur is select empno,ename,job from emp; --創(chuàng)建游標(biāo)
vempno emp.empno%type;
vename emp.ename%type;
vjob emp.job%type;
begin
open mycur;--打開游標(biāo)
fetch mycur into vempno,vename,vjob;--使用數(shù)據(jù)
dbms_output.put_line('I Found You!'||mycur%rowcount||'行');
dbms_output.put_line('讀取的數(shù)據(jù)為'||vempno||' '||vename||' '||vjob);
close mycur;
end;
因?yàn)橹蛔x出來一條,所以要遍歷一下:
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—循環(huán),遍歷
fetch mycur into vempno,vename,vjob;
exit when mycur%notfound;
if mycur%found then
dbms_output.put_line('讀取的數(shù)據(jù)為'||vempno||' '||vename||' '||vjob);
end if;
end loop;
dbms_output.put_line('I Found You!'||mycur%rowcount||'行');
close mycur;
end;
6:通常情況下我們在讀取表數(shù)據(jù)的時候,我們需要動態(tài)的去查詢.所以能不能在Oracle中給游標(biāo)帶參數(shù)呢?可以!
1):如何定義帶參數(shù)的游標(biāo):
declare cursor cursor_name(參數(shù)名稱 參數(shù)類型描述) is select xxxxx from bbbbb where aaa==??? and ccc=???;
2):例子:
游標(biāo)是一個集合,讀取數(shù)據(jù)有兩種方式
第一種方式: open fetch close
第二種方式: for 一但使用了for循環(huán) ,在循環(huán)剛剛開始的時候,相當(dāng)于執(zhí)行open,在處理循環(huán)的時候,相當(dāng)于執(zhí)行fetch,在退出循環(huán)的時候,相當(dāng)于執(zhí)行了close
Declare cursor query(vname varchar) is select empno,ename,job from emp where ename like'%'||vname||'%';
三種游標(biāo)的例子:
--
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;
TRUNCATE TABLE速度更快,不備份日志
DELETE FROM TABLE + COMMIT ,速度稍慢,備份日志
兩者都是刪除表內(nèi)容不刪除表結(jié)構(gòu)。
應(yīng)該是這樣的,因?yàn)闆]有環(huán)境,沒測試,你試下。
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;