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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 靜態變數變數
- 指標變數指標變數
- SQL 必須宣告標量變數SQL變數
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- 【C++】靜態持續變數?如何建立靜態持續變數?C++變數
- Spring如何為靜態變數注入值Spring變數
- 區域性變數和全域性變數(靜態和非靜態)區別變數
- 純css改變輸入框游標顏色CSS
- const 變數和指標變數指標
- java執行緒安全問題之靜態變數、例項變數、區域性變數Java執行緒變數
- 對於systemverilog靜態變數和動態變數 ,描述不正確的是()。變數
- Java靜態變數在靜態方法內部無法改變值Java變數
- cad十字游標怎麼設定大小 CAD如何讓十字游標中間變大
- javascript:私有變數 (靜態私有變數為什麼會被所以例項共享?-答疑解惑)JavaScript變數
- 對 “C語言指標變數作為函式引數” 的個人理解C語言指標變數函式
- 易優CMS模板標籤assign定義變數模板檔案中定義變數,可在其他標籤裡使用該變數變數
- spingboot使用@Resource注入靜態變數報空指標的問題解決boot變數指標
- 巨集_變數_函式_指標_標頭檔案變數函式指標
- C語言指標(二) 指標變數 ----by xhxhC語言指標變數
- Java中的類(好似結構體) 物件(好似指標變數)變數 方法Java結構體物件指標變數
- C語言--靜態區域性變數C語言變數
- Java逆向基礎之靜態變數存取Java變數
- Java自學入門之靜態變數Java變數
- 游標美化
- 變數的分類(臨時(本地)變數、環境變數、全域性變數和系統變數)變數
- maven中properties標籤定義變數Maven變數
- 8.10 標頭檔案剖析:變數宣告變數
- 被 C# 的 ThreadStatic 標記的靜態變數,都存放在哪裡了?C#thread變數
- input 獲取游標位置與設定游標位置
- 關於單例及靜態變數測試單例變數
- [20221130]PLSQL的變數作用範圍(linux).txtSQL變數Linux
- 為什麼標準庫的模板變數都是inline的變數inline
- Dll堆疊問題(Dll的靜態變數與全域性變數、vs的MT與MD)變數
- 指標:存放記憶體地址的變數指標記憶體變數
- 智慧指標引用計數變化學習指標
- python變數與變數作用域Python變數
- Ansible fact變數與魔法變數變數
- 動態臨時變數為 Azure DevOps Pipeline 變數自定義錦上添花變數dev
- PL/SQL基本結構---PLSQL複合型別---表型別變數tableSQL型別變數