日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle入门(十四.11)之使用显式游标属性

發布時間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle入门(十四.11)之使用显式游标属性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、游標和記錄

此示例中的游標基于SELECT語句,該語句僅檢索每個表行的兩列。 如果它檢索了六列或七,八,二十個呢?

DECLAREv_emp_id employees.employee_id%TYPE;v_last_name employees.last_name%TYPE;CURSOR emp_cursor ISSELECT employee_id, last_nameFROM employeesWHERE department_id = 30; BEGINOPEN emp_cursor;LOOPFETCH emp_cursorINTO v_emp_id, v_last_name;...

該游標檢索整個EMPLOYEES行。 凌亂而啰嗦,不是嗎?

DECLAREv_emp_id employees.employee_id%TYPE;v_first_name employees.first_name%TYPE;v_last_name employees.last_name%TYPE;...v_department_id employees.department_id%TYPE;CURSOR emp_cursor ISSELECT * FROM employeesWHERE department_id = 30; BEGINOPEN emp_cursor;LOOPFETCH emp_cursorINTO v_emp_id, v_first_name, v_last_name ...v_department_id;...

比較下面的代碼片段。 你看到了什么差異?

DECLAREv_emp_id ...;v_first_name ...;...v_department_id ...:CURSOR emp_cursor ISSELECT * FROM employeesWHERE department_id =30; BEGINOPEN emp_cursor;LOOPFETCH emp_cursorINTO v_emp_id, v_first_name,... v_department_id;... DECLARECURSOR emp_cursor ISSELECT * FROM employeesWHERE department_id = 30;v_emp_recordemp_cursor%ROWTYPE; BEGINOPEN emp_cursor;LOOPFETCH emp_cursorINTO v_emp_record;...

右側的代碼使用%ROWTYPE根據游標聲明記錄結構。 記錄是PL / SQL中的復合數據類型。

?

二、PL / SQL記錄的結構

記錄是一種復合數據類型,由多個字段組成,每個字段都有自己的名稱和數據類型。 您通過在字段名前加上記錄名來引用每個字段。 %ROWTYPE用與它所基于的游標相同的字段聲明一個記錄。

(1)cursor_name%ROWTYPE的結構

DECLARECURSOR emp_cursor ISSELECT employee_id, last_name, salary FROM employeesWHERE department_id = 30;v_emp_record emp_cursor%ROWTYPE;

?

(2)游標和%ROWTYPE

%ROWTYPE便于處理活動集的行,因為您可以簡單地獲取記錄。

?

?

DECLARECURSOR emp_cursor ISSELECT * FROM employeesWHERE department_id = 30; v_emp_record emp_cursor%ROWTYPE; BEGINOPEN emp_cursor;LOOPFETCH emp_cursor INTO v_emp_record;EXIT WHEN emp_cursor%NOTFOUND;DBMS_OUTPUT.PUT_LINE(v_emp_record.employee_id|| ' - ' ||v_emp_record.last_name);END LOOP;CLOSE emp_cursor; END;

(3)游標和%ROWTYPE:另一個例子

DECLARECURSOR emp_dept_cursor ISSELECT first_name, last_name, department_nameFROM employees e, departments dWHERE e.department_id = d.department_id; v_emp_dept_record emp_dept_cursor%ROWTYPE; BEGINOPEN emp_dept_cursor;LOOPFETCH emp_dept_cursor INTO v_emp_dept_record;EXIT WHEN emp_dept_cursor%NOTFOUND;DBMS_OUTPUT.PUT_LINE(v_emp_dept_record.first_name||' – '||v_emp_dept_record.last_name||' – '||v_emp_dept_record.department_name);END LOOP;CLOSE emp_dept_cursor; END;

?

三、顯式游標屬性

與隱式游標一樣,有幾個屬性可用于獲取有關顯式游標的狀態信息。 當附加到游標變量名稱后,這些屬性返回有關游標操作語句執行的有用信息。

(1)%ISOPEN屬性

只有當光標打開時才可以獲取行。 在執行提取以測試游標是否處于打開狀態之前,請使用%ISOPEN游標屬性。 %ISOPEN返回游標狀態:如果打開則為TRUE,否則返回FALSE。

例:

IF NOT emp_cursor%ISOPEN THEN OPEN emp_cursor; END IF; LOOPFETCH emp_cursor...

(2)%ROWCOUNT和%NOTFOUND屬性

通常在循環中使用%ROWCOUNT和%NOTFOUND屬性來確定何時退出循環。
對以下內容使用%ROWCOUNT游標屬性:
?處理確切的行數

?計算循環中到目前為止獲取的行數和/或確定何時退出循環

對以下內容使用%NOTFOUND游標屬性:
?確定查詢是否找到符合條件的行
?確定何時退出循環

(3)%ROWCOUNT和%NOTFOUND的示例

此示例顯示了如何在循環中使用%ROWCOUNT和%NOTFOUND屬性作為退出條件。

DECLARECURSOR emp_cursor ISSELECT employee_id, last_name FROM employees;v_emp_record emp_cursor%ROWTYPE; BEGINOPEN emp_cursor;LOOPFETCH emp_cursor INTO v_emp_record;EXIT WHEN emp_cursor%ROWCOUNT > 10 OR emp_cursor%NOTFOUND;DBMS_OUTPUT.PUT_LINE(v_emp_record.employee_id |' '|| v_emp_record.last_name);END LOOP;CLOSE emp_cursor; END;

(4)SQL語句中的顯式游標屬性

您不能直接在SQL語句中使用顯式游標屬性。 以下代碼返回一個錯誤:

DECLARECURSOR emp_cursor ISSELECT employee_id, salary FROM employeesORDER BY SALARY DESC;v_emp_record emp_cursor%ROWTYPE;v_count NUMBER; BEGINOPEN emp_cursor;LOOPFETCH emp_cursor INTO v_emp_record;EXIT WHEN emp_cursor%NOTFOUND;INSERT INTO top_paid_emps(employee_id, rank, salary)VALUES(v_emp_record.employee_id, emp_cursor%ROWCOUNT,v_emp_record.salary); ...

?

?

?

總結

以上是生活随笔為你收集整理的Oracle入门(十四.11)之使用显式游标属性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。