日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 數據庫 > Oracle > 正文

oracle如何合并多個sys_refcursor詳解

2024-08-29 14:01:06
字體:
來源:轉載
供稿:網友

一、背景

在數據開發中,有時你需要合并兩個動態游標sys_refcursor。

開發一個存儲過程PROC_A,這個過程業務邏輯相當復雜,代碼篇幅較長。一段時間后要開發一個PROC_B,要用PROC_A同樣的邏輯,而且在這個過程中,還要循環調用PROC_A這個過程。擺在你面前的有兩個選擇。

  • 打開PL/SQL,仔細的讀PROC_A這個過程,一直到明白了所有的邏輯,然后在自己的過程中重寫這個邏輯 。
  • 直接復制PROC_A這個過的代碼過來,多寫極端。還是業界標準大法好
  • 針對循環調用的,建立一個臨時表,循環插入數據到臨時表(但這里還有一個問題,每次返回的游標可能列都不相同,建立臨時表就顯得復雜了)

好吧,這個新的過程是完成了,可是看上去,它更復雜了,代碼量更大了。完全不能接受,必須改改! 
這時,已經默默打開了ORACLE官方幫助文檔 https://docs.oracle.com/cd/B19306_01/index.htm,尋找一個可行的辦法,最終目標標是要解析,整合,合并 游標 sys_refcursor

二、思路

經過搜索查詢,找到以下可行的方案

  1. 序列化sys_refcursor為xml文檔,ORACLE對xml支持還不錯,12C已經有JSON格式了
  2. 使用ORACLE xml解析的方法,對序列化的xml文檔,添加、刪除、修改
  3. 轉換為內存表,通過游標返回查詢的結果

為此你需要掌握的知識有

  • 使用 Dbms_Lob 個package操作clob類型數據,因為解析后的游標可能用varchar2是裝不下的,幫助地址 https://docs.oracle.com/cd/E11882_01/timesten.112/e21645/d_lob.htm#TTPLP600。
  • 重點掌握Oracle類型xmltype如何使用 https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/t_xml.htm#BABHCHHJ

三、實現

從上邊的幫助文檔中,知道xmltype的構造函數中可以直接傳入游標xmltype(refcursor)從而得到一個xmltype,調用xmltype的getClobVal方法,可得到序列化的結果,所以它的結構是這樣的

<?xml version="1.0"?><ROWSET><ROW><COLUMNNAME1></COLUMNNAME1><COLUMNNAME2></COLUMNNAME2><...>...</...></ROW>....</ROWSET>

所以,如果需要合并兩個數據列相同游標,只需要提取DOM中的ROW節點數據保存到定義的clob字段中去。

提取dom中片段,采用標準的xpath語法,/ROWSET/ROW這里提取ROW信息

Declarex xmltype;rowxml clob;mergeXml clob;ref_cur Sys_Refcursor;ref_cur2 Sys_Refcursor;ref_cur3 Sys_Refcursor;begin open ref_cur for select F_USERNAME, F_USERCODE, F_USERID from Tb_System_User where F_userid = 1; Dbms_Lob.createtemporary(mergeXml, true); Dbms_Lob.writeappend(mergeXml, 8, '<ROWSET>'); x := xmltype(ref_cur); Dbms_Output.put_line('=====完整的REFCURSOR結構====='); Dbms_Output.put_line(x.getClobVal()); Dbms_Output.put_line('=====只提取行信息====='); rowxml := x.extract('/ROWSET/ROW').getClobVal(0, 0); Dbms_Output.put_line(rowxml); Dbms_Lob.append(mergeXml, rowxml);ROWSET open ref_cur2 for select F_USERNAME, F_USERCODE, F_USERID from Tb_System_User where F_userid = 1000; x := xmltype(ref_cur2); rowxml := x.extract('/ROWSET/ROW').getClobVal(0, 0); Dbms_Lob.append(mergeXml, rowxml); Dbms_Lob.writeappend(mergeXml, 9, '</ROWSET>'); Dbms_Output.put_line('=====合并后的信息====='); Dbms_Output.put_line(mergeXml);end;

 執行這段代碼輸出的結果是這樣的

=====完整的REFCURSOR結構=====<?xml version="1.0"?><ROWSET><ROW><F_USERNAME>系統管理員</F_USERNAME><F_USERCODE>admin</F_USERCODE><F_USERID>1</F_USERID></ROW></ROWSET>=====只提取行信息=====<ROW><F_USERNAME>系統管理員</F_USERNAME><F_USERCODE>admin</F_USERCODE><F_USERID>1</F_USERID></ROW>=====合并后的信息=====<ROWSET><ROW><F_USERNAME>系統管理員</F_USERNAME><F_USERCODE>admin</F_USERCODE><F_USERID>1</F_USERID></ROW><ROW><F_USERNAME>黃燕</F_USERNAME><F_USERCODE>HUANGYAN</F_USERCODE><F_USERID>1000</F_USERID></ROW></ROWSET>

 從上邊打印的結果看,我們已經成功的將兩個游標 ref_cur和ref_cur2中我們需要的列信息合并到了一個xml文檔中。那么接下了,我們就需要通過解析這個xml并返回一個新的sys_refcursor,這里你有必要了解以下oracle xmltable的用法(https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions228.htm)接上邊代碼

Dbms_Output.put_line(mergeXml);open ref_cur3 for select * from xmltable('/ROWSET/ROW' Passing xmltype(mergeXml) Columns  F_USERNAME varchar2(100) path 'F_USERNAME',  F_USERCODE varchar2(100) path 'F_USERCODE');

簡單說明下xmltable構造函數

  • 聲明xpath,指明你需要解析的dom在哪里,比如從根找到ROW /ROWSET/ROW
  • 指明你要查詢的xmltype
  • 定義轉換列,比如把ROW下邊的F_USERNAME這個節點值,映射到游標列F_USERNAME 這個列中

附:sys_refcursor 和 cursor 優缺點比較

優點比較

優點一:sys_refcursor,可以在存儲過程中作為參數返回一個table格式的結構集(我把他認為是table類型,容易理解,其實是一個游標集), cursor 只能用在存儲過程,函數,包等的實現體中,不能做參數使用。

優點二:sys_refcursor 這東西可以使用在包中做參數,進行數據庫面向對象開放。哈哈。我喜歡。cursor就不能。

缺點比較:

缺點:sys_refcursor 不能用open,close ,fetch 進行操作。不好學,難理解。

cursor可以用 open,close ,fetch操作,容易學,易懂

四、總結

xml作為早期數據傳輸,序列化和反序列化的文件格式,在oracle中也有良好的支持。所以,對于基于語言之上的知識,各個語言實現方式基本相識。基礎終究是重要的。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到oracle教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲欧美99| 国产成人精品999| 国产精品福利视频一区二区三区| 搞黄在线观看| 91精品国产综合久久精品app| 国产激情在线视频| 中文字幕亚洲一区在线观看| 中文字幕在线视频网| 精品亚洲综合| 亚洲一区中文| 国产黄色精品| 色综合影院在线| 视频一区三区| 精品亚洲永久免费| 黄色视屏免费在线观看| 亚洲高清在线免费| 日韩不卡一区二区| 国产欧美日韩综合| 欧美日韩亚洲第一| av一区在线观看| 中文在线不卡| 一区二区国产在线| 亚洲视频中文字幕| 欧美日韩乱国产| 日韩国产91| 国产成人精品综合久久久| 欧美日韩亚洲一区| 91精品国产免费久久综合| 日韩国产一区| 中文字幕在线看视频国产欧美| 日本黄色一区二区| 91精品国产色综合久久久蜜香臀| 日韩久久不卡| 国产高清在线观看| 亚洲福利在线观看| 91精品国产综合久久久蜜臀粉嫩 | 国产一区不卡精品| 日韩中文字幕视频在线观看| 国产高清一区| 蜜桃视频中文字幕| 一区二区三区精品在线| 成人xxxx| 中文字幕在线观看精品| 欧美日韩激情一区| 日韩国产一区三区| 伊人网站在线| 国产视频2区| 国产福利不卡| 日韩欧美三级在线| 日韩国产亚洲欧美| 国产激情久久久| 亚洲欧洲日韩在线| 亚洲日本欧美日韩高观看| 精品久久在线观看| 欧美日韩精品中文字幕| 日韩欧美中文字幕精品| 亚洲一级影院| 日韩免费视频一区| 亚洲第一视频在线观看| 国产1卡2卡三卡四卡网站| 韩国av一区二区| 日韩欧美中文免费| 欧美日韩一级视频| 中文av字幕一区| 国产 欧美在线| 亚洲人线精品午夜| 国产乱码在线观看| 中文字幕在线视频久| 1区2区3区在线视频| 黄色国产在线| 亚洲男人在线| 午夜伊人狠狠久久| 欧美一级欧美三级在线观看| 欧美 日韩 国产在线观看| 人人做人人澡人人爽欧美| 欧美日韩高清不卡| 国产在线拍偷自揄拍精品| 日韩精品视频网| 91精品国产手机| 日本精品福利视频| 欧美日韩视频网站| 欧美日韩国产综合视频在线观看中文| 91精品国产乱码久久蜜臀| 久久99久久久久久久噜噜| www.eeuss影院| 日韩va亚洲va欧洲va国产| 欧美日韩综合在线观看| 中文国产字幕在线观看| 精品久久久久久综合日本欧美| 国产乱国产乱300精品| 精品久久在线观看| 91久久中文| 久久婷婷中文字幕| 国产欧美日韩中文久久| 久久久综合av| 久久综合九色欧美综合狠狠| 欧美一级免费看| 午夜亚洲一区| 午夜国产福利一区二区| 欧美日韩人人澡狠狠躁视频| 国产一区成人| 国产中文在线观看| 日韩免费精品视频| 久久综合久久综合九色| √新版天堂资源在线资源| 91精品国产日韩91久久久久久| 国产久卡久卡久卡久卡视频精品| 福利在线国产| 久久夜色精品国产欧美乱极品 | 日韩中文字幕在线视频观看| 91精品国产综合久久精品| 日韩视频在线免费播放| 日韩av一区二区在线观看| 日韩欧美中文| 欧美精选午夜久久久乱码6080| 欧美日韩视频免费| 一区二区视频国产| 日韩欧美三级| 一区二区三区在线免费 | 粉嫩粉嫩芽的虎白女18在线视频| 国产在线日韩欧美| 亚洲成年人在线播放| 国产成人精品免费网站| 日韩av一区在线| 亚洲视频在线观看日本a| 国产网站欧美日韩免费精品在线观看 | 黄色片免费看| 欧美日韩激情在线一区二区三区| 欧美一级免费在线观看| 日韩欧美中文在线| 在线视频色在线| 色综合天天性综合| 欧美日韩国产大片| 欧美性极品xxxx做受| 中文字幕亚洲视频| 日韩不卡在线播放| 在线中文字幕视频| 日韩福利视频导航| 精品久久久久久无| 一区二区三区在线|网站| 日韩欧美综合视频| 蜜桃视频中文字幕| 欧美日韩在线观看成人| 在线资源av| 国产高清精品二区| 999精品网| 亚洲一区三区在线观看| 国产欧美日产一区| 久草视频观看| 精品一二三四区| 国产在线高清精品| 日韩不卡一区二区| 91久久久精品| 日韩欧美在线不卡| 欧美日韩国产一中文字不卡| 久久久久久91| 在线视频亚洲| 国产丝袜在线播放| 欧美不卡视频一区发布| 天堂在线中文资源| 成人xxxx| 日韩在线视频精品| 欧美日韩激情一区二区三区| 快she精品国产999| 国产午夜精品久久| 久久99久久久久久久噜噜| 日本亚洲欧美| 国产一区成人| 日韩欧美不卡在线| 国产在线二区| 欧美日韩在线三级| 日本a口亚洲| 成人福利一区| 欧美日韩国产综合视频在线观看 | 亚洲一区三区在线观看| 天堂中文在线视频| 欧美国产小视频| 国产在线导航| 日韩午夜中文字幕| 日韩av一区在线| 欧美日韩亚洲91| 免费一级欧美在线观看视频| 亚洲国产无线乱码在线观看 | 黄色视屏免费在线观看| 精品调教chinesegay| 日韩欧美在线综合网| 亚洲福利精品在线| 欧美中文字幕第一页| 国产日韩综合| 国产乱国产乱老熟300| 国产蜜臀在线| 91精品国产自产91精品| 91精品国产99| 日韩精品视频在线播放| 在线综合 亚洲 欧美中文字幕| 亚洲高清不卡一区| 一二三区精品福利视频| 国产在线第一页| 亚洲成在线观看| 91精品国产自产| 欧美变态tickling挠脚心| √天堂资源中文www| 久久99蜜桃精品| 黄色片免费在线| 亚洲欧美小说国产图片| 最新日韩中文字幕| 国产成人精品免费网站| 中文字幕中文字幕精品| www.91香蕉视频| 日韩中文欧美| 国产农村妇女精品一二区| 国产高清大尺度一区二区不卡| 国产偷久久久精品专区| 欧洲精品在线一区| 日韩中文字幕视频在线观看| 久久精品黄色片| 91精品国产高清| 国产在线小视频| 91蜜桃婷婷狠狠久久综合9色| 日韩三级精品| 激情综合色综合久久| 一区二区高清视频| 999视频精品| 精品亚洲永久免费| 最新中文字幕在线| 亚洲一区激情| 日韩精品视频在线播放| 欧美日韩中文字幕精品| 国产婷婷色一区二区三区| 亚洲福利在线视频| 亚洲视频电影在线| 日韩国产在线观看一区| 日韩精品视频在线播放| 日韩欧美在线网址| 色综合婷婷久久| 亚洲欧美日本另类| 日韩欧美在线网站| 日本视频久久久| 国产网站欧美日韩免费精品在线观看| 福利一区二区| 精品一性一色一乱农村| 国产欧美日韩在线观看| 精品日韩av| 日韩精品手机在线| 日韩av在线中文字幕| av亚洲免费| 精品成人久久久| 欧美xxxx中国| 一级免费a一片| 在线国产一级| 欧美99久久| 欧美日韩国产123区| 欧美日韩精品久久久| 久久久久蜜桃| 日韩av一区二区在线| 亚洲一区在线观看网站| 午夜精品免费视频| 日韩一级二级三级| 日韩精品a在线观看91| 日韩 欧美 综合| 日韩三级高清在线| 欧美日韩成人一区| 欧美日韩国产中字| 成人h视频在线观看| 亚洲免费观看视频| 欧美精品一区二区三区在线播放| 国产一区二中文字幕在线看| 日韩中文字幕国产| 欧美性极品xxxx做受| 中文在线а√在线8| 日韩欧美一卡二卡| 国产黄色在线播放| 天堂在线视频中文网| 91精品xxx在线观看| 国内不卡的二区三区中文字幕| 欧美日韩国产中文| 中文字幕成人乱码在线电影| 香蕉精品久久| 日韩久久99| 亚洲永久免费视频| 国产高潮久久久| 国产在线高清精品| 91精品国产乱码久久蜜臀| 91精品高清| 在线视频你懂得一区| 免费在线视频一区二区| 在线看欧美日韩| 亚洲一区在线观看视频| 国产日韩精品在线看| 日韩免费看网站| 欧美片网站免费| 一区二区三区在线|网站| 国产91欧美| 日韩一级二级三级| 欧美日韩视频网站| 日韩中文字幕91| 久久久精品免费免费| 在线中文字幕视频观看| 高清国产一区| 中文字幕亚洲一区二区av在线| 国产三级做爰在线观看| 国产视频2区| 亚洲欧洲在线观看av| 国产日韩中文字幕在线| 日韩欧美在线网站| 不卡在线一区二区| 国产一区三区三区| 日韩视频在线一区二区| 天天综合天天做| 欧美一级二级三级区| 久草视频观看| 天天综合天天| 99精品在线播放| 日本黄色一区二区三区| 九七久久人人| 亚洲免费精品视频| 日韩精品福利视频| 国产裸体歌舞团一区二区| 国产成人精品999| 国产日产一区二区三区 | 亚洲高清视频在线| 中文在线视频观看| 欧美婷婷久久| 欧美一级欧美三级在线观看| 日韩视频免费直播| 亚洲第一视频网站| 色综合久久88色综合天天免费| 高清1区2区| 精品无人国产偷自产在线| 日韩午夜中文字幕| 91精品综合久久久久久| 亚洲成a人片在线www| 日韩中文字幕观看| 免费视频久久| 91精品国产欧美日韩| 日韩欧美亚洲区| av首页在线| 亚洲成av人综合在线观看| 日韩视频第二页| 日韩欧美国产高清| 欧美亚洲视频在线看网址| 日韩1区在线| 日韩欧美视频一区二区三区四区| 日韩高清在线一区二区| 中文字幕亚洲乱码| 国产裸体歌舞团一区二区| 亚洲午夜91| 日韩免费高清一区二区| 综合图区亚洲白拍在线| 日韩免费不卡avV| 91久久精品在线| 91精品国产亚洲| 一区视频在线播放| 亚洲成av人片在线| 日韩精品欧美在线| 欧美日韩综合在线免费观看| 精品视频—区二区三区免费| a√免费观看在线网址www| 人人做人人澡人人爽欧美| 国产欧美日韩精品在线| 91精品国产综合久久蜜臀| 久草亚洲一区| 亚洲免费中文字幕| 国产日韩综合| 欧美日韩精品综合在线| 欧美变态tickling挠脚心| 在线精品视频免费播放| 亚洲二区自拍| 国产导航在线| 亚洲成人7777| 正在播放日韩精品| 欧美日韩中文在线| 香蕉人人精品| 二区视频在线观看| 中文字幕在线国产| 国产欧美日韩不卡免费| 日韩欧美中文在线| 精品乱子伦一区二区| 亚洲免费精品| 国产黄在线播放| 亚洲综合在线中文字幕| 精品精品久久| 日韩欧美一级在线播放| 国产在线高潮| 日韩欧美国产亚洲| aaa大片在线观看| 日韩中文字幕亚洲| 国产高潮久久久| 综合激情国产一区| 欧美日韩精品免费| 国产高清在线一区| 国产裸体歌舞团一区二区| 中文字幕精品www乱入免费视频| 综合激情一区| 91精品免费在线观看| 中文字幕 欧美日韩| 亚洲一区激情| 中文字幕第一页在线播放| 九九精品调教| 国产视频1区2区|