Oracle plsql session間通訊處理
Oracle中,要實現session間的通訊,並不能像C++或java一樣直接實現。而要透過dbms_pipe或dbms_alert包實現。
dbms_pipe的概念類似於unix下的管道,可以非同步輸出中間結果。
dbms_pipe的用途:
我們知道,在plsql執行過程中,如果一個事務正在處理中,是不能獲取中間輸出的資訊的,如:dbms_output的輸出。這樣的話我們就無法知道這個事務到底處理到了什麼步驟。
此時,就可以使用dbms_pipe來實現這樣的需求了。由於這個包是用於session間通訊的,說明在事務處理過程中,可以將對應的資訊打包傳送。而另外的session可以根據指定管道的名稱來獲得這些內容。
傳送方具體實現步驟如下:
建立管道:
v_status := create_pipe(pipe_name);
--pipe_name:管道名稱
返回結果:0:成功;ora-23322表示對應管道名稱已經存在。
打包要傳送的訊息:
pack_message(msg_content);
--msg_content:要傳送的訊息內容
可以為varchar2、number、rowid、date、raw、nchar中的一種。
根據指定的管道傳送訊息:
send_message(pipe_name);
--pipe_name:指定要傳送訊息的管道的名稱
返回結果:0:成功;1:超時;3:中斷;ora-23322
接收方具體實現:
receive_message(pipe_name);
--pipe_name:即指定要訊息來源的管道的名稱;
next_item_type();
--返回接收的訊息的資料型別
返回結果:
0:no more items;
6:number;
9:varchar2;
11:rowid;
12:date;
23:raw;
解包:
unpack_message(item);
對應的item的型別要由前面next_item_type所決定。然後輸出即可。
另外,在plsql dev上,還可以透過Event monitor工具來觀察管道的輸出。即可省去手動解包的過程。
dbms_alert也可以實現類似的功能,區別在於dbms_alert需要事務中執行commit後才能傳送訊息。而且支援的資料格式也只有文字形式,而不能像dbms_pipe可以支援date、rowid等其他型別。
詳細內容參考:
dbms_pipe的概念類似於unix下的管道,可以非同步輸出中間結果。
dbms_pipe的用途:
我們知道,在plsql執行過程中,如果一個事務正在處理中,是不能獲取中間輸出的資訊的,如:dbms_output的輸出。這樣的話我們就無法知道這個事務到底處理到了什麼步驟。
此時,就可以使用dbms_pipe來實現這樣的需求了。由於這個包是用於session間通訊的,說明在事務處理過程中,可以將對應的資訊打包傳送。而另外的session可以根據指定管道的名稱來獲得這些內容。
傳送方具體實現步驟如下:
建立管道:
v_status := create_pipe(pipe_name);
--pipe_name:管道名稱
返回結果:0:成功;ora-23322表示對應管道名稱已經存在。
打包要傳送的訊息:
pack_message(msg_content);
--msg_content:要傳送的訊息內容
可以為varchar2、number、rowid、date、raw、nchar中的一種。
根據指定的管道傳送訊息:
send_message(pipe_name);
--pipe_name:指定要傳送訊息的管道的名稱
返回結果:0:成功;1:超時;3:中斷;ora-23322
接收方具體實現:
receive_message(pipe_name);
--pipe_name:即指定要訊息來源的管道的名稱;
next_item_type();
--返回接收的訊息的資料型別
返回結果:
0:no more items;
6:number;
9:varchar2;
11:rowid;
12:date;
23:raw;
解包:
unpack_message(item);
對應的item的型別要由前面next_item_type所決定。然後輸出即可。
另外,在plsql dev上,還可以透過Event monitor工具來觀察管道的輸出。即可省去手動解包的過程。
dbms_alert也可以實現類似的功能,區別在於dbms_alert需要事務中執行commit後才能傳送訊息。而且支援的資料格式也只有文字形式,而不能像dbms_pipe可以支援date、rowid等其他型別。
詳細內容參考:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-620812/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 處理Oracle Session中的鎖OracleSession
- Android高通平臺處理器間通訊驅動Android
- ORACLE 處理時間Oracle
- plsql異常處理SQL
- 【開發篇plsql】plsql事務處理SQL
- TCP通訊處理粘包詳解TCP
- oracle對於時間間隔的處理Oracle
- oracle時間日常處理小結Oracle
- 程序間的通訊(訊號通訊)
- JSP Session處理 (轉)JSSession
- 通訊訊號處理的一些基本常識
- Oracle Temp臨時表空間處理Oracle
- oracle 表空間 不足時如何處理Oracle
- 【Vue專案總結】元件通訊處理方案Vue元件
- 訊號處理技術:現代通訊技術的基石
- [Oracle報錯處理]ORA-00031: session marked for killOracleSession
- 程式間通訊
- 程序間通訊
- ThinkPHP 3.2 中 session 的處理PHPSession
- HttpServer伺服器命令處理通訊架構HTTPServer伺服器架構
- plsql顯示韓文亂碼的處理方法SQL
- 音訊處理音訊
- Nginx和Tomcat的session處理NginxTomcatSession
- PHP程式間通訊PHP
- 程式間的通訊
- 程式間通訊(Socket)
- 程式間通訊 --IPC
- windows程式間通訊Windows
- React 《元件間通訊》React元件
- 聊天列表訊息合併,處理相鄰時間
- Python-OpenCV 處理視訊(二): 視訊處理PythonOpenCV
- oracle中undo表空間丟失處理方法Oracle
- oracle sysaux表空間滿了處理辦法OracleUX
- Oracle undo表空間爆滿的處理方法Oracle
- Oracle 安裝目錄空間不夠處理Oracle
- 常見問題--plsql處理ora-28000SQL
- 程式間通訊--訊息佇列佇列
- 程序間通訊(4)-訊號量