PLSQL Language Referenc-PL/SQL靜態SQL-游標變數-游標變數作為宿主變數
游標變數作為宿主變數
宿主變數主要用於在PL/SQL儲存儲存子程式和它的客戶端之間傳遞查詢結果集。當游標變數為宿主變數的時候,PL/SQL和它的客戶(宿主環境)共享儲存查詢結果集的SQL工作區指標。
為了把游標變數作為宿主變數,需要在宿主環境中宣告游標變數,然後把它作為輸入宿主變數(繫結變數)傳遞給PL/SQL。宿主游標變數相容任何返回型別,即是弱型別的。
--游標變數作為Proc*C客戶端程式中的宿主變數 EXEC SQL BEGIN DECLARE SECTION; SQL_CURSOR generic_cv; -- 宣告宿主游標變數 int choice; -- 選擇 EXEC SQL END DECLARE SECTION; EXEC SQL ALLOCATE :generic_cv; -- 初始宿主游標變數 -- 將宿主游標變數傳遞給PL/SQL塊 / EXEC SQL EXECUTE 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-EXEC; |
當有任何游標變數指向它的時候,SQL工作區仍然是可訪問的,即使是從一個範圍向另一個範圍。例如上例中,Proc*C程式傳遞宿主游標變數到嵌入的匿名PL/SQL塊中。在塊執行之後,游標變數仍然指向SQL工作區。
如果在客戶端有PL/SQL引擎,則從客戶端呼叫伺服器沒有限制。例如,可以客戶端宣告一個宿主游標變數,然後開啟從伺服器端開啟和獲取它,然後從客戶端開啟和獲取它。也可以通過在PL/SQL匿名塊中的一個往返中開啟和關閉多個宿主游標變數,來降低網路流量。
--在宿主環境中的PL/SQL匿名塊 BEGIN OPEN :emp_cv FOR SELECT * FROM employees; OPEN :dept_cv FOR SELECT * FROM departments; OPEN :loc_cv FOR SELECT * FROM locations; END; |
在PL/SQL匿名塊執行之後,游標變數仍然指向SQL工作區,所以客戶端程式可以使用它。當客戶端程式不再需要這些游標變數的時候,可以使用PL/SQL匿名塊來關閉它們。
--宿主環境中的匿名PL/SQL塊 BEGIN CLOSE :emp_cv; CLOSE :dept_cv; CLOSE :loc_cv; END; |
這個技術對於在Oracle Form中產生多塊窗體非常有用。
BEGIN OPEN :c1 FOR SELECT 1 FROM DUAL; OPEN :c2 FOR SELECT 1 FROM DUAL; OPEN :c3 FOR SELECT 1 FROM DUAL; END; |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1122898/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 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
- PL/SQL-遊標和遊標變數的使用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 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
- C語言區域性變數、全域性變數、靜態區域性變數、靜態全域性變數C語言變數
- 指標變數指標變數
- 靜態全域性變數和全域性變數變數
- 靜態變數和例項變數區別?變數
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-對BOOLEAN變數賦值SQL變數賦值Boolean
- PLSQL 遊標 變數的使用一例SQL變數
- PLSQL Language Referenc-PL/SQL動態SQL-何時需要動態SQLSQL
- SQL 必須宣告標量變數SQL變數
- 靜態變數與靜態方法變數
- 全域性變數和靜態變數的區別變數
- 【C++】靜態持續變數?如何建立靜態持續變數?C++變數
- C++智慧指標作為成員變數C++指標變數
- PLSQL Language Referenc-PL/SQL靜態SQL-事務處理和控制-savepoint語句SQL
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-作為子程式引數來賦值SQL變數賦值
- 靜態持續變數變數
- 靜態變數和Session變數Session
- PLSQL的變數SQL變數
- Windows 7下讓閃爍游標變粗Windows
- PLSQL Language Referenc-PL/SQL集合和記錄-集合變數賦值-資料的相容性SQL變數賦值