国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Oracle存儲過程中任務(wù)和管道的應(yīng)用
前言 在ORACLE數(shù)據(jù)庫實際應(yīng)用過程中,經(jīng)常把業(yè)務(wù)處理邏輯的放在存儲過程,客戶端通過ADO進行調(diào)用。有些業(yè)務(wù)邏輯處理量大并且復(fù)雜,使客戶端調(diào)用存儲過程后,長時間沒有反應(yīng),也不知存儲過程運行狀態(tài),本文講述如何在ORACLE通過任務(wù)和管道的應(yīng)用異步調(diào)用存儲過程的方法。 2. 基本原理 1.使用DBMS_JOB包將主處理存儲過程作為任務(wù)提交到任務(wù)隊列中; 2.主處理存儲過程在運行過程中通過DBMS_PipE包將處理情況放在管道中; 3.監(jiān)控存儲過程讀取管道,從而了解處理情況; 4.本文沒有描述雙向通信的方式,監(jiān)控存儲過程可以通過管道發(fā)送信息給主處理存儲過程。 3. 具體實現(xiàn)測試 建立測試環(huán)境 3.1. 對數(shù)據(jù)庫的ini進行相關(guān)修改,使系統(tǒng)的任務(wù)隊列功能打開 對于Oracle9I,只需修設(shè)定數(shù)據(jù)庫的INI內(nèi)的"JOB_QUEUE_PROCESSES=非0值",如 "JOB_QUEUE_PROCESSES=10",對于ORACLE8I除設(shè)定實例ini文件中的"JOB_QUEUE_PROCESSES=非0值"外,還需設(shè)定"job_queue_interval=1"。 3.2. 設(shè)用用戶權(quán)限 由于使用ORACLE中特定的程序包,所以要注重要明文給于用戶系統(tǒng)權(quán)限。對當(dāng)前用戶(測試用戶),賦于以下權(quán)力:
    EXECUTE DBMS_PIPE   EXECUTE DBMS_LOCK   EXECUTE DBMS_JOB
 
3.3. 建立模擬大業(yè)務(wù)處理存儲過程 本存儲過程通過循環(huán)30次,調(diào)用DBMS_LOCK.SLEEP(1)(體眠1秒)和寫管道模擬大的處理過程。 具體代碼如下
   CREATE OR REPLACE PROCEDURE maXPro
                  AS    n     integer;   
                                 status NUMBER;  
                     BEGIN   
                              FOR N IN 1..30 LOOP   DBMS_PIPE.PURGE('maxpro'); --清除原管道信息 
                                         DBMS_PIPE.PACK_MESSAGE(N); --把信息放入緩沖區(qū) 
                                        status:=DBMS_PIPE.SEND_MESSAGE('maxpro');  
                                        DBMS_LOCK.SLEEP(1);   
                               END LOOP;   
                                          DBMS_PIPE.PURGE('maxpro'); --清除原管道信息  
                                          DBMS_PIPE.PACK_MESSAGE(999999); --把信息放入緩沖區(qū),用999999 表示過程完成                                            status:=DBMS_PIPE.SEND_MESSAGE('maxpro');   
                        END maxpro;
 
3.4. 建立讀取管道動態(tài)了解處理狀態(tài)的存儲過程 以下代碼是對于maxpro存儲過程的狀態(tài)進行讀取的過程,主要使用讀取管道的方法,注重:
    status:= DBMS_PIPE.RECEIVE_MESSAGE('maxpro',0);
 
中的"0"參數(shù)是很要害的,說明接受等待時間為0秒,表示,調(diào)用時假如沒有信息不等待直接返回。 具體代碼如下:
    CREATE OR REPLACE PROCEDURE readmaxpro AS   n integer;   status integer;   begin   --接受等待時間為1秒,可以為0,立即調(diào)用或 DBMS_PIPE.RECEIVE_MESSAGE('mypipe') 等待100天  status:= DBMS_PIPE.RECEIVE_MESSAGE('maxpro',0);   --status為0為成功可以UNPACK_MESSAGE,1為超時沒有數(shù)據(jù), 2為信息太大,3為內(nèi)部錯誤  IF status <> 0 THEN   DBMS_OUTPUT.PUT_LINE('管道中現(xiàn)在沒有信息返回');   return;   END IF;   DBMS_PIPE.UNPACK_MESSAGE(n);   DBMS_OUTPUT.PUT_LINE('maxpro 的當(dāng)前進行狀態(tài)為' n);   end;
 
3.5. -起動模擬大業(yè)務(wù)處理存儲過程為后臺進程的存儲過程(BEGINMAXPRO) 通過DBMS_JOB.SUBMIT(JOB,'maxpro;',sysdate,NULL,FALSE);使"maxpro"為一個任務(wù),在當(dāng)前時間(sysdate)后執(zhí)行,當(dāng)然假如把sysdate改一具體時間,那就在具體時間執(zhí)行。 具休代碼如下:
    CREATE OR REPLACE PROCEDURE beginmaxpro AS   JOB BINARY_INTEGER;   BEGIN   DBMS_JOB.SUBMIT(JOB,'maxpro;',sysdate,NULL,FALSE);   DBMS_OUTPUT.PUT_LINE('隊列號碼JOB=' JOB);   COMMIT;   end;
 
4. 代碼執(zhí)行 4.1. 執(zhí)行過程
  在CMD行輸入 sqlplus 根據(jù)提示登錄  設(shè)定DBMS_OUTPUT可見  SQL> set serveroutput ON   以下是執(zhí)行過程和相應(yīng)的返回信息  SQL> call beginmaxpro();   隊列號碼JOB=21   調(diào)用完成?! QL> call readmaxpro();   maxpro 的當(dāng)前進行狀態(tài)為14   調(diào)用完成?! QL> call readmaxpro();   maxpro 的當(dāng)前進行狀態(tài)為16   調(diào)用完成?! QL> call readmaxpro();   maxpro 的當(dāng)前進行狀態(tài)為23   調(diào)用完成?! QL> call readmaxpro();   maxpro 的當(dāng)前進行狀態(tài)為999999   調(diào)用完成?! QL> call readmaxpro();   管道中現(xiàn)在沒有信息返回  調(diào)用完成?! QL>
 
4.2. 執(zhí)行分析 beginmaxpro(),將主處理存儲過程放入隊列的過程,執(zhí)行后存儲程序馬上返回,maxpro存儲過程放在任務(wù)隊列中,并設(shè)定為在當(dāng)前系統(tǒng)時間執(zhí)行(馬上執(zhí)行)。 maxpro為主處理存儲過程,開始執(zhí)行模擬大業(yè)務(wù)處理,處理過程中將處理進度信息寫入管道。 readmaxpro();為檢查狀態(tài)存儲過程,首先讀取信息,假如信息不存在,說明管道內(nèi)沒有信息可讀而退出;假如存在信息則讀出信息。 本例子可以進行改進,輸出不通過DBMS_OUTPUT.PUT_LINE而是用返回值,那么就可以在前端用ADO調(diào)用,發(fā)布任務(wù),任務(wù)過程中從客戶端讀取進度。代碼如下:
    CREATE OR REPLACE PROCEDURE readmaxpro(p out intergr) AS   n integer;   status integer;   begin   status:= DBMS_PIPE.RECEIVE_MESSAGE('maxpro',0);   IF status <> 0 THEN   P:=-1;   return;   END IF;   DBMS_PIPE.UNPACK_MESSAGE(p);   end;
 
 
-
資料引用:http://www.knowsky.com/390269.html
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
[精華] 在Oracle運行操作系統(tǒng)命令 (轉(zhuǎn)載)
Java調(diào)用存儲過程
Oracle入門基礎(chǔ):Oracle通過job定時創(chuàng)建表
Oracle查看表、存儲過程、觸發(fā)器、函數(shù)等對象定義語句的方法 .
Oracle數(shù)據(jù)庫SQL注入淺析與防護建議 | 游俠安全網(wǎng) YouXia.ORG
PB與各種數(shù)據(jù)庫連接
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服