bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

oracle游標怎么掃描 oracle查看游標

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的游標?

Oracle中的游標分為顯示游標和隱式游標。

顯示游標:

顯示游標是用cursor...is命令定義的游標,它可以對查詢語句(select)返回的多條記錄進行處理;顯示游標的操作:打開游標、操作游標、關閉游標;

隱式游標:

隱式游標是在執行插入(insert)、刪除(delete)、修改(update)和返回單條記錄的查詢(select)語句時由PL/SQL自動定義的。PL/SQL隱式地打開SQL游標,并在它內部處理SQL語句,然后關閉它。

快速掌握Oracle數據庫游標的使用方法

顯式游標

當查詢返回結果超過一行時 就需要一個顯式游標 此時用戶不能使用select into語句 PL/SQL管理隱式游標 當查詢開始時隱式游標打開 查詢結束時隱式游標自動關閉 顯式游標在PL/SQL塊的聲明部分聲明 在執行部分或異常處理部分打開 取出數據 關閉

使用游標

這里要做一個聲明 我們所說的游標通常是指顯式游標 因此從現在起沒有特別指明的情況 我們所說的游標都是指顯式游標 要在程序中使用游標 必須首先聲明游標

聲明游標

語法

CURSOR cursor_name IS select_statement;

在PL/SQL中游標名是一個未聲明變量 不能給游標名賦值或用于表達式中

DELCARE CURSOR C_EMP IS SELECT empno ename salary FROM emp WHERE salary ORDER BY ename; BEGIN

在游標定義中SELECT語句中不一定非要表可以是視圖 也可以從多個表或視圖中選擇的列 甚至可以使用*來選擇所有的列

打開游標

使用游標中的值之前應該首先打開游標 打開游標初始化查詢處理 打開游標的語法是

OPEN cursor_name

cursor_name是在聲明部分定義的游標名

OPEN C_EMP; 關閉游標

語法

CLOSE cursor_name

CLOSE C_EMP; 從游標提取數據 從游標得到一行數據使用FETCH命令 每一次提取數據后 游標都指向結果集的下一行 語法如下

FETCH cursor_name INTO variable[ variable ]

對于SELECT定義的游標的每一列 FETCH變量列表都應該有一個變量與之相對應 變量的類型也要相同

SET SERVERIUTPUT ON DECLARE v_ename EMP ENAME%TYPE; v_salary EMP SALARY%TYPE; CURSOR c_emp IS SELECT ename salary FROM emp; BEGIN OPEN c_emp; FETCH c_emp INTO v_ename v_salary; DBMS_OUTPUT PUT_LINE( Salary of Employee || v_ename || is || v_salary); FETCH c_emp INTO v_ename v_salary; DBMS_OUTPUT PUT_LINE( Salary of Employee || v_ename || is || v_salary); FETCH c_emp INTO v_ename v_salary; DBMS_OUTPUT PUT_LINE( Salary of Employee || v_ename || is || v_salary); CLOSE c_emp; END

這段代碼無疑是非常麻煩的 如果有多行返回結果 可以使用循環并用游標屬性為結束循環的條件 以這種方式提取數據 程序的可讀性和簡潔性都大為提高 下面我們使用循環重新寫上面的程序

SET SERVERIUTPUT ON DECLARE v_ename EMP ENAME%TYPE; v_salary EMP SALARY%TYPE; CURSOR c_emp IS SELECT ename salary FROM emp; BEGIN OPEN c_emp; LOOP FETCH c_emp INTO v_ename v_salary; EXIT WHEN c_emp%NOTFOUND; DBMS_OUTPUT PUT_LINE( Salary of Employee || v_ename || is || v_salary); END

記錄變量

定義一個記錄變量使用TYPE命令和%ROWTYPE 關于%ROWsTYPE的更多信息請參閱相關資料

記錄變量用于從游標中提取數據行 當游標選擇很多列的時候 那么使用記錄比為每列聲明一個變量要方便得多

當在表上使用%ROWTYPE并將從游標中取出的值放入記錄中時 如果要選擇表中所有列 那么在SELECT子句中使用*比將所有列名列出來要得多

SET SERVERIUTPUT ON DECLARE R_emp EMP%ROWTYPE; CURSOR c_emp IS SELECT * FROM emp; BEGIN OPEN c_emp; LOOP FETCH c_emp INTO r_emp; EXIT WHEN c_emp%NOTFOUND; DBMS_OUT PUT PUT_LINE( Salary of Employee ||r_emp ename|| is || r_emp salary); END LOOP; CLOSE c_emp; END;

%ROWTYPE也可以用游標名來定義 這樣的話就必須要首先聲明游標

SET SERVERIUTPUT ON DECLARE CURSOR c_emp IS SELECT ename salary FROM emp; R_emp c_emp%ROWTYPE; BEGIN OPEN c_emp; LOOP FETCH c_emp INTO r_emp; EXIT WHEN c_emp%NOTFOUND; DBMS_OUT PUT PUT_LINE( Salary of Employee ||r_emp ename|| is || r_emp salary); END LOOP; CLOSE c_emp; END;

帶參數的游標

與存儲過程和函數相似 可以將參數傳遞給游標并在查詢中使用 這對于處理在某種條件下打開游標的情況非常有用 它的語法如下

CURSOR cursor_name[(parameter[ parameter] )] IS select_statement;

定義參數的語法如下

Parameter_name [IN] data_type[{:=|DEFAULT} value]

與存儲過程不同的是 游標只能接受傳遞的值 而不能返回值 參數只定義數據類型 沒有大小

另外可以給參數設定一個缺省值 當沒有參數值傳遞給游標時 就使用缺省值 游標中定義的參數只是一個占位符 在別處引用該參數不一定可靠

在打開游標時給參數賦值 語法如下

OPEN cursor_name[value[ value] ];

參數值可以是文字或變量

DECALRE CURSOR c_dept IS SELECT * FROM dept ORDER BY deptno; CURSOR c_emp (p_dept VARACHAR ) IS SELECT ename salary FROM emp WHERE deptno=p_dept ORDER BY ename r_dept DEPT%ROWTYPE; v_ename EMP ENAME%TYPE; v_salary EMP SALARY%TYPE; v_tot_salary EMP SALARY%TYPE; BEGIN OPEN c_dept; LOOP FETCH c_dept INTO r_dept; EXIT WHEN c_dept%NOTFOUND; DBMS_OUTPUT PUT_LINE ( Department: || r_dept deptno|| ||r_dept dname); v_tot_salary:= ; OPEN c_emp(r_dept deptno); LOOP FETCH c_emp INTO v_ename v_salary; EXIT WHEN c_emp%NOTFOUND; DBMS_OUTPUT PUT_LINE ( Name: || v_ename|| salary: ||v_salary); v_tot_salary:=v_tot_salary+v_salary; END LOOP; CLOSE c_emp; DBMS_OUTPUT PUT_LINE ( Toltal Salary for dept: || v_tot_salary); END LOOP; CLOSE c_dept; END;

游標FOR循環

在大多數時候我們在設計程序的時候都遵循下面的步驟

打開游標

開始循環

從游標中取值

那一行被返回

處理

關閉循環

關閉游標

可以簡單的把這一類代碼稱為游標用于循環 但還有一種循環與這種類型不相同 這就是FOR循環 用于FOR循環的游標按照正常的聲明方式聲明 它的優點在于不需要顯式的打開 關閉 取數據 測試數據的存在 定義存放數據的變量等等 游標FOR循環的語法如下

FOR record_name IN (corsor_name[(parameter[ parameter] )] | (query_difinition) LOOP statements END LOOP;

下面我們用for循環重寫上面的例子

DECALRE CURSOR c_dept IS SELECT deptno dname FROM dept ORDER BY deptno; CURSOR c_emp (p_dept VARACHAR ) IS SELECT ename salary FROM emp WHERE deptno=p_dept ORDER BY ename v_tot_salary EMP SALARY%TYPE; BEGIN FOR r_dept IN c_dept LOOP DBMS_OUTPUT PUT_LINE ( Department: || r_dept deptno|| ||r_dept dname); v_tot_salary:= ; FOR r_emp IN c_emp(r_dept deptno) LOOP DBMS_OUTPUT PUT_LINE ( Name: || v_ename || salary: || v_salary); v_tot_salary:=v_tot_salary+v_salary; END LOOP; DBMS_OUTPUT PUT_LINE ( Toltal Salary for dept: || v_tot_salary); END LOOP; END;

在游標FOR循環中使用查詢

在游標FOR循環中可以定義查詢 由于沒有顯式聲明所以游標沒有名字 記錄名通過游標查詢來定義

DECALRE v_tot_salary EMP SALARY%TYPE; BEGIN FOR r_dept IN (SELECT deptno dname FROM dept ORDER BY deptno) LOOP DBMS_OUTPUT PUT_LINE( Department: || r_dept deptno|| ||r_dept dname); v_tot_salary:= ; FOR r_emp IN (SELECT ename salary  FROM emp  WHERE deptno=p_dept  ORDER BY ename) LOOP DBMS_OUTPUT PUT_LINE( Name: || v_ename|| salary: ||v_salary); v_tot_salary:=v_tot_salary+v_salary; END LOOP; DBMS_OUTPUT PUT_LINE( Toltal Salary for dept: || v_tot_salary); END LOOP; END;

游標中的子查詢

語法如下

CURSOR C IS SELECT * FROM emp WHERE deptno NOT IN (SELECT deptno FROM dept WHERE dname!= ACCOUNTING );

可以看出與SQL中的子查詢沒有什么區別

游標中的更新和刪除

在PL/SQL中依然可以使用UPDATE和DELETE語句更新或刪除數據行 顯式游標只有在需要獲得多行數據的情況下使用 PL/SQL提供了僅僅使用游標就可以執行刪除或更新記錄的方法

UPDATE或DELETE語句中的WHERE CURRENT OF子串專門處理要執行UPDATE或DELETE操作的表中取出的最近的數據 要使用這個方法 在聲明游標時必須使用FOR UPDATE子串 當對話使用FOR UPDATE子串打開一個游標時 所有返回集中的數據行都將處于行級(ROW LEVEL)獨占式鎖定 其他對象只能查詢這些數據行 不能進行UPDATE DELETE或SELECT FOR UPDATE操作

語法

FOR UPDATE [OF [schema ]lumn[ [schema ]lumn] [nowait]

在多表查詢中 使用OF子句來鎖定特定的表 如果忽略了OF子句 那么所有表中選擇的數據行都將被鎖定 如果這些數據行已經被其他會話鎖定 那么正常情況下ORACLE將等待 直到數據行解鎖

在UPDATE和DELETE中使用WHERE CURRENT OF子串的語法如下

WHERE{CURRENT OF cursor_name|search_condition}

DELCARE CURSOR c IS SELECT empno salary FROM emp WHERE m IS NULL FOR UPDATE OF m; v_m NUMBER( ); BEGIN FOR r IN c LOOP IF r salary THEN v_m:=r salary* ; ELSEIF r salary THEN v_m:=r salary* ; ELSEIF r salary THEN v_m:=r salary* ; ELSE v_m:=r salary* ; END IF; UPDATE emp; SET m=v_m WHERE CURRENT OF c l; END LOOP; END

lishixinzhi/Article/program/Oracle/201311/16865

游標是什么?ORACLE是怎樣使用游標的?舉例說明!

一 游標是什么

游標字面理解就是游動的光標。

用數據庫語言來描述:游標是映射在結果集中一行數據上的位置實體,有了游標,用戶就可以訪問結果集中的任意一行數據了,將游標放置到某行后,即可對該行數據進行操作,例如提取當前行的數據等。

二 游標的分類

顯式游標和隱式游標

顯式游標的使用需要4步:

1. 聲明游標

CURSOR mycur(vartype number) is

select emp_no,emp_zc from cus_emp_basic

where com_no = vartype;

2. 打開游標

open mycur(000627)

注:000627是參數

3. 讀取數據

fetch mycur into varno, varprice;

4. 關閉游標

close mycur;

三 游標的屬性

oracle 游標有4個屬性:%ISOPEN,%FOUND,%NOTFOUND,%ROWCOUNT。

%ISOPEN判斷游標是否被打開,如果打開%ISOPEN等于true,否則等于false;

%FOUND %NOTFOUND判斷游標所在的行是否有效,如果有效,則%FOUNDD等于true,否則等于false;

%ROWCOUNT返回當前位置為止游標讀取的記錄行數。

四 示例

set serveroutput on;

declare

varno varchar2(20);

varprice varchar2(20);

CURSOR mycur(vartype number) is

select emp_no,emp_zc from cus_emp_basic

where com_no = vartype;

begin

if mycur%isopen = false then

open mycur(000627);

end if;

fetch mycur into varno,varprice;

while mycur%found

loop

dbms_output.put_line(varno||','||varprice);

if mycur%rowcount=2 then

exit;

end if;

fetch mycur into varno,varprice;

end loop;

close mycur;

end;

PL/SQL記錄的結構和C語言中的結構體類似,是由一組數據項構成的邏輯單元。

PL/SQL記錄并不保存在數據庫中,它與變量一樣,保存在內存空間中,在使用記錄時候,要首先定義記錄結構,然后聲明記錄變量。可以把PL/SQL記錄看作是一個用戶自定義的數據類型。

set serveroutput on;

declare

type person is record

(

empno cus_emp_basic.emp_no%type,

empzc cus_emp_basic.emp_zc%type);

person1 person;

cursor mycur(vartype number)is

select emp_no,emp_zc from cus_emp_basic

where com_no=vartype;

begin

if mycur%isopen = false then

open mycur(000627);

end if;

loop

fetch mycur into person1;

exit when mycur%notfound;

dbms_output.put_line('雇員編號:'||person1.empno||',地址:'||person1.empzc);

end loop;

close mycur;

end;

典型游標for 循環

游標for循環示顯示游標的一種快捷使用方式,它使用for循環依次讀取結果集中的行數據,當form循環開始時,游標自動打開(不需要open),每循環一次系統自動讀取游標當前行的數據(不需要fetch),當退出for循環時,游標被自動關閉(不需要使用close)。使用游標for循環的時候不能使用open語句,fetch語句和close語句,否則會產生錯誤。

set serveroutput on;

declare

cursor mycur(vartype number)is

select emp_no,emp_zc from cus_emp_basic

where com_no=vartype;

begin

for person in mycur(000627) loop

dbms_output.put_line('雇員編號:'||person.emp_no||',地址:'||person.emp_zc);

end loop;

end;

本文題目:oracle游標怎么掃描 oracle查看游標
轉載源于:http://vcdvsql.cn/article34/hpjdpe.html

成都網站建設公司_創新互聯,為您提供App開發面包屑導航網站改版微信小程序關鍵詞優化全網營銷推廣

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都app開發公司