日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:332日期:2023-11-19 12:15:31
顯式游標 當查詢返回結果超過一行時,就需要一個顯式游標,此時用戶不能使用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>2000 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 VARACHAR2) 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:=0; 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循環 在大多數時候我們在設計程序的時候都遵循下面的步驟: 1、打開游標。 2、開始循環。 3、從游標中取值。 4、那一行被返回。 5、處理。 6、關閉循環。 7、關閉游標。 可以簡單的把這一類代碼稱為游標用于循環。但還有一種循環與這種類型不相同,這就是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 VARACHAR2) 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:=0; 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:=0; 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 C1 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.]table.column[,[schema.]table.column].. [nowait] 在多表查詢中,使用OF子句來鎖定特定的表,假如忽略了OF子句,那么所有表中選擇的數據行都將被鎖定。假如這些數據行已經被其他會話鎖定,那么正常情況下Oracle將等待,直到數據行解鎖。 在UPDATE和DELETE中使用WHERE CURRENT OF子串的語法如下: WHERE{CURRENT OF cursor_namesearch_condition} 例: DELCARE CURSOR c1 IS SELECT empno,salary FROM emp WHERE comm IS NULL FOR UPDATE OF comm; v_comm NUMBER(10,2); BEGIN FOR r1 IN c1 LOOP IF r1.salary<500 THEN v_comm:=r1.salary*0.25; ELSEIF r1.salary<1000 THEN v_comm:=r1.salary*0.20; ELSEIF r1.salary<3000 THEN v_comm:=r1.salary*0.15; ELSE v_comm:=r1.salary*0.12; END IF; UPDATE emp; SET comm=v_comm WHERE CURRENT OF c1l; END LOOP; END
標簽: Oracle 數據庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品一区二区三区中文字幕| 欧美成a人片免费观看久久五月天| 日韩一区自拍| 日韩一区二区三区高清在线观看| 一区二区精品伦理...| 国产精品入口久久| 亚洲综合另类| 欧美成人综合| 欧美国产美女| 欧美激情在线精品一区二区三区| 免费观看在线综合色| 黄色成人91| 激情综合亚洲| 色在线视频观看| 91综合视频| 国产成人精品免费视| 欧美另类中文字幕| 日韩中文字幕区一区有砖一区| 999精品一区| 日韩欧美自拍| 国产乱码午夜在线视频| 国产探花一区| 日本不卡免费高清视频在线| 麻豆视频在线观看免费网站黄| 久久免费精品| 国产精品毛片一区二区在线看| 国内精品麻豆美女在线播放视频| 精品日韩一区| 亚洲成av人片一区二区密柚| 亚洲a在线视频| 久久午夜精品一区二区| 免费久久精品视频| 日韩中文av| 国产精品视频一区二区三区| 另类小说一区二区三区| 福利一区二区三区视频在线观看| 美腿丝袜在线亚洲一区| 天堂а√在线最新版中文在线| а√天堂8资源中文在线| 在线看片不卡| 国产精品对白| 91一区二区三区四区| 黑丝一区二区| 日韩av三区| 欧美日韩一二三四| 日韩国产欧美在线视频| 国产激情欧美| 日韩精品欧美激情一区二区| 在线视频免费在线观看一区二区| 蜜桃久久久久久| 国产va免费精品观看精品视频| 久久九九精品| 欧美在线精品一区| 成人va天堂| 91精品丝袜国产高跟在线| 99久久视频| 国产精品www994| 性色一区二区| 97精品97| 久久av资源| 免费看欧美美女黄的网站| 麻豆视频一区二区| 欧美一级精品| 国产日韩欧美一区在线| 日韩欧美视频专区| 精品国产一区二| 人人爽香蕉精品| 久久在线免费| 日本一区二区高清不卡| 国产日韩欧美三区| 在线精品亚洲| 亚洲精品网址| 亚洲婷婷免费| caoporn视频在线| 国产在线不卡一区二区三区| 国产一区二区色噜噜| 亚洲日本国产| 模特精品在线| 亚洲欧美日韩专区| 99视频精品免费观看| 日韩专区精品| 中文字幕系列一区| 日韩深夜视频| www.com.cn成人| 天堂日韩电影| 亚洲天堂av影院| 美女网站一区| 99国产精品久久久久久久成人热| 99精品视频在线| 91精品一区二区三区综合| 欧美sss在线视频| 亚洲成人一区在线观看| 久久天堂影院| 免费福利视频一区二区三区| 日韩深夜视频| 一区二区亚洲精品| 快she精品国产999| 日韩1区2区3区| 久久久精品区| www成人在线视频| 亚洲激情二区| 日韩一区二区三免费高清在线观看| 在线国产日韩| 国产激情综合| 国产高清一区二区| 四虎国产精品免费久久| 日韩av不卡一区二区| 国产精品黄网站| 欧美在线观看视频一区| 亚洲日产国产精品| 精品亚洲a∨| 亚洲精品午夜av福利久久蜜桃| 亚洲区第一页| 国产欧洲在线| 日韩精品久久理论片| 日本不良网站在线观看| 午夜av成人| 国产成人精品一区二区三区免费| 国产精品老牛| 国产成人精品一区二区三区视频 | 欧美13videosex性极品| 欧美日韩色图| 日本综合字幕| 日韩欧美中文字幕电影| 日韩精品不卡一区二区| 日本在线视频一区二区| 欧美日韩在线观看首页| 亚洲精品影院在线观看| 久久一区二区三区喷水| 国产精品99一区二区三| 日本不卡视频在线观看| 精品免费在线| 91精品日本| 亚洲青青久久| 日韩一区二区免费看| 免费在线小视频| 麻豆精品av| 国产精品18| 国产亚洲电影| 国产精品亚洲人成在99www| 亚洲专区欧美专区| 99国产精品| 在线综合亚洲| 国产亚洲精品v| 丝瓜av网站精品一区二区 | 免费观看在线综合色| 亚洲国产一区二区在线观看 | 日本午夜精品久久久| 久久久久国产一区二区| 亚洲精品自拍| 国产综合色区在线观看| 亚洲激情av| 麻豆精品一区二区综合av| 欧美日韩亚洲一区二区三区在线| 国产精品亚洲一区二区在线观看| 国产日产精品_国产精品毛片 | 亚洲一区欧美| 亚洲性视频在线| 日韩制服丝袜先锋影音| 亚洲人成毛片在线播放女女| 日本成人手机在线| 精品久久久久久久| 欧美日中文字幕| 日韩专区欧美专区| 精品三级国产| 免费国产自久久久久三四区久久| 亚洲欧洲一区| 日本不卡视频一二三区| 国产精品欧美三级在线观看| 成人精品动漫一区二区三区| 老牛影视一区二区三区| 美女视频黄 久久| 亚洲激情不卡| 丝袜美腿亚洲色图| 久久女人天堂| 蜜芽一区二区三区| 久久久久免费| 久久激情五月婷婷| 亚洲激精日韩激精欧美精品| 国产一区国产二区国产三区| 欧美+日本+国产+在线a∨观看| 日韩高清成人在线| 亚洲成人精品| 另类综合日韩欧美亚洲| 日韩二区三区四区| 亚洲女同一区| 国产白浆在线免费观看| 在线人成日本视频| 日韩中文首页| 国产 日韩 欧美 综合 一区| 久久影院资源站| 国产精品久久乐| 国产成人精品免费视| 久久久久欧美精品| 免费日韩av| 91亚洲精品在看在线观看高清| 美女久久精品| 黄色不卡一区| 国产一级成人av| 色88888久久久久久影院|