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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PLSQL Language Referenc-PL/SQL靜態SQL-游標變數-游標變數作為宿主變數SQL變數
- PLSQL Language Referenc-PL/SQL靜態SQL-游標變數-建立游標變數SQL變數
- PLSQL Language Referenc-PL/SQL靜態SQL-游標變數-游標變數賦值SQL變數賦值
- PLSQL Language Referenc-PL/SQL靜態SQL-游標變數SQL變數
- PLSQL Language Referenc-PL/SQL靜態SQL-游標變數-開啟和關閉游標變數SQL變數
- PLSQL Language Referenc-PL/SQL靜態SQL-靜態SQL的描述-游標-顯式游標SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-靜態SQL的描述-游標-開啟和關閉顯式游標SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-使用顯式游標OPEN-FETCH-CLOSE處理查詢結果集SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-靜態SQL的描述-偽列SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-靜態SQL的描述-語句SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-自治事務(二)SQL
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-作為子程式引數來賦值SQL變數賦值
- PL/SQL-遊標和遊標變數的使用SQL變數
- PLSQL Language Referenc-PL/SQL靜態SQL-事務處理和控制SQL
- PLSQL Language Reference-PL/SQL子程式-子程式引數-子程式引數傳遞方法SQL
- PLSQL Language Referenc-PL/SQL動態SQL-練習:在USING子句中未初始化的變數表示NULLSQL變數Null
- PLSQL Language Referenc-PL/SQL靜態SQL-自治事務-控制自治事務SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-查詢結果集處理SQL
- PLSQL Language Referenc-PL/SQL動態SQL-練習:在動態SQL塊中呼叫子程式。SQL
- PLSQL Language Referenc-PL/SQL動態SQL-何時需要動態SQLSQL
- PLSQL Language Reference-PL/SQL子程式-子程式引數-實參的位置、名稱和混合標記SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-事務處理和控制-savepoint語句SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-帶有子查詢的查詢結果集處理SQL
- 靜態變數和非靜態變數變數
- PLSQL Language Referenc-PL/SQL子程式-子程式呼叫SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-事務處理和控制-隱式回滾SQL
- PLSQL Language Referenc-PL/SQL動態SQL-本地動態SQL(EXECUTE IMMEDIATE語句)SQL
- [20121016]字串長度與繫結變數的子游標.txt字串變數
- 靜態變數變數
- 對 “C語言指標變數作為函式引數” 的個人理解C語言指標變數函式
- PLSQL Language Referenc-PL/SQL靜態SQL-事務處理和控制-覆蓋預設的鎖SQL
- PLSQL Language Referenc-PL/SQL子程式-使用子程式的原因SQL
- PLSQL Language Referenc-PL/SQL子程式-前向宣告SQL
- PLSQL 遊標 變數的使用一例SQL變數
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-對BOOLEAN變數賦值SQL變數賦值Boolean
- 指標變數指標變數
- C語言區域性變數、全域性變數、靜態區域性變數、靜態全域性變數C語言變數
- PLSQL Language Referenc-PL/SQL集合和記錄-集合變數賦值-資料的相容性SQL變數賦值