PLSQL Language Referenc-PL/SQL靜態SQL-游標變數-游標變數作為子程式引數
游標變數作為子程式引數
游標變數可以作為子程式引數用於在子程式之間傳遞查詢結果集:
可以在一個子程式中開啟游標變數,在其它的子程式中處理它。
在多語言應用中,PL/SQL子程式可以使用游標變數返回查詢結果給用其它語言寫的子程式。
注意:呼叫和被呼叫的子程式需要位於相同的資料庫例項中,不能向通過資料庫鏈呼叫的子程式傳遞和返回游標變數。
如果子程式開啟或給游標變數賦值,則引數需要為IN OUT型別;如果子程式只是獲取資料,或關閉游標變數,則引數可以為IN或 IN OUT型別。
形參和實參游標變數型別必須具有相容的返回型別,否則引起ROWTYPE_MISMATCH異常。
如果需要在不同的PL/SQL單元的子程式間傳遞游標變數引數,在包中定義引用游標型別的變數,當型別在包中,則多個子程式可以使用它。
--建立包 CREATE OR REPLACE PACKAGE emp_data AS TYPE empcurtyp IS REF CURSOR RETURN employees%ROWTYPE; PROCEDURE open_emp_cv (emp_cv IN OUT empcurtyp); END emp_data; / CREATE OR REPLACE PACKAGE BODY emp_data AS PROCEDURE open_emp_cv (emp_cv IN OUT EmpCurTyp) IS BEGIN --開啟游標 OPEN emp_cv FOR SELECT * FROM employees; END open_emp_cv; END emp_data;
--為選擇的語句開啟游標變數(具有相同的返回型別) CREATE OR REPLACE PACKAGE emp_data AS TYPE empcurtyp IS REF CURSOR RETURN employees%ROWTYPE; PROCEDURE open_emp_cv (emp_cv IN OUT empcurtyp, choice INT); END emp_data; / CREATE OR REPLACE PACKAGE BODY emp_data AS PROCEDURE open_emp_cv (emp_cv IN OUT empcurtyp, choice INT) IS BEGIN IF choice = 1 THEN OPEN emp_cv FOR SELECT * FROM employees WHERE commission_pct IS NOT NULL; ELSIF choice = 2 THEN OPEN emp_cv FOR SELECT * FROM employees WHERE salary > 2500; ELSIF choice = 3 THEN OPEN emp_cv FOR SELECT * FROM employees WHERE department_id = 100; END IF; END; END emp_data;
--為選擇的查詢開啟游標(具有不同的返回型別) CREATE OR REPLACE PACKAGE admin_data AS TYPE gencurtyp IS REF CURSOR; --弱型別 PROCEDURE open_cv (generic_cv IN OUT gencurtyp, choice INT); END admin_data; / CREATE OR REPLACE PACKAGE BODY admin_data AS PROCEDURE open_cv (generic_cv IN OUT gencurtyp, choice INT) IS BEGIN IF choice = 1 THEN OPEN generic_cv FOR SELECT * FROM employees; ELSIF choice = 2 THEN OPEN generic_cv FOR SELECT * FROM departments; ELSIF choice = 3 THEN OPEN generic_cv FOR SELECT * FROM jobs; END IF; END; END admin_data; |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1122772/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 靜態變數變數
- 對 “C語言指標變數作為函式引數” 的個人理解C語言指標變數函式
- SQL 必須宣告標量變數SQL變數
- 指標變數指標變數
- 【C++】靜態持續變數?如何建立靜態持續變數?C++變數
- Spring如何為靜態變數注入值Spring變數
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- 游標美化
- 純css改變輸入框游標顏色CSS
- 區域性變數和全域性變數(靜態和非靜態)區別變數
- input 獲取游標位置與設定游標位置
- cad十字游標怎麼設定大小 CAD如何讓十字游標中間變大
- const 變數和指標變數指標
- PL/SQL第三章--游標SQL
- [20180724]Flashback query和子游標共享.txt
- 對於systemverilog靜態變數和動態變數 ,描述不正確的是()。變數
- 鍵盤控制游標移動作業
- java執行緒安全問題之靜態變數、例項變數、區域性變數Java執行緒變數
- spingboot使用@Resource注入靜態變數報空指標的問題解決boot變數指標
- Vim游標移動
- Java靜態變數在靜態方法內部無法改變值Java變數
- javascript:私有變數 (靜態私有變數為什麼會被所以例項共享?-答疑解惑)JavaScript變數
- [20180613]子游標不共享BIND_EQUIV_FAILUREUIAI
- Bash變數和引數變數
- python變數和引數Python變數
- 巨集_變數_函式_指標_標頭檔案變數函式指標
- C語言指標(二) 指標變數 ----by xhxhC語言指標變數
- [20210812]測試sql語句子游標的效能.txtSQL
- (12)mysql 中的游標MySql
- 阻止游標預設事件事件
- css 滑鼠游標設定CSS
- 【Swing】JTextField設定游標
- 【CURSOR】Oracle 子游標無法共享的原因之V$SQL_SHARED_CURSOROracleSQL
- 易優CMS模板標籤assign定義變數模板檔案中定義變數,可在其他標籤裡使用該變數變數
- [20200129]子游標不共享BIND_EQUIV_FAILURE.txtUIAI
- win10游標怎麼縮放_win10游標縮放方法Win10
- cad游標大小怎麼調 cad游標中心正方形大小設定
- 被 C# 的 ThreadStatic 標記的靜態變數,都存放在哪裡了?C#thread變數
- C語言--靜態區域性變數C語言變數