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); --把信息放入緩沖區 status:=DBMS_PIPE.SEND_MESSAGE('maxpro'); DBMS_LOCK.SLEEP(1); END LOOP; DBMS_PIPE.PURGE('maxpro'); --清除原管道信息 DBMS_PIPE.PACK_MESSAGE(999999); --把信息放入緩沖區,用999999 表示過程完成 status:=DBMS_PIPE.SEND_MESSAGE('maxpro'); END maxpro;
CREATE OR REPLACE PROCEDURE readmaxpro AS n integer; status integer; begin --接受等待時間為1秒,可以為0,立即調用或 DBMS_PIPE.RECEIVE_MESSAGE('mypipe') 等待100天 status:= DBMS_PIPE.RECEIVE_MESSAGE('maxpro',0); --status為0為成功可以UNPACK_MESSAGE,1為超時沒有數據, 2為信息太大,3為內部錯誤 IF status <> 0 THEN DBMS_OUTPUT.PUT_LINE('管道中現在沒有信息返回'); return; END IF; DBMS_PIPE.UNPACK_MESSAGE(n); DBMS_OUTPUT.PUT_LINE('maxpro 的當前進行狀態為' n); end;
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;
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;