Oracle: 甲 App 新增一筆資料時, 乙 App 可馬上得知嗎? |
答題得分者是:Mickey
|
hagar
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
Mickey
版主 ![]() ![]() ![]() ![]() ![]() 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
hagar
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
引言: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=24940 可不可行...Mickey 前輩您好: 先謝謝您的回答。 :-) 小弟看了您提供的解答中如下的一句: "以 DB Server 為 Client, DB Client 為 Server, 當 DB server 確認完成 DML(Insert/Update/Delete)時, 發起請求 DB Client 執行 DataSet Re-Open 動作" 想問的是 DB Server 發起請求 DB Client 執行動作 這個請求動作是應該由某 App 發起嗎? 我想 Mickey 前輩的意思是甲 App 在新增資料至 Oracle 後 由甲 App發訊息給乙 App, 然後乙 App 執行 DataSet Re-Open 的動作。 小弟現在的問題是能在不更改甲 App 的情況下 而當甲 App 將資料新增至 Oracle 後 乙 App 能馬上得知, 且乙 App 不是隨時去檢查 DataSet 是否有異動 這情況下可能做到嗎?謝謝指教。 -- 將進酒 杯莫停 與君歌一曲 請君為我傾耳聽 |
amide
一般會員 ![]() ![]() 發表:4 回覆:13 積分:13 註冊:2002-07-11 發送簡訊給我 |
|
hagar
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
Mickey
版主 ![]() ![]() ![]() ![]() ![]() 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
引言: 那請問一下, Oracle 的 Trigger 中 可以呼叫外部程式或傳送訊息給外部程式?1.據我所知, Oracle 沒有直接這樣做的機制, 但 Oracle 又提供一個很有趣的 package "DBMS_PIPE" 去執行 command shell, 以下是一段 Sample PL/SQL , 我沒驗證過,不知能不能 work. CREATE OR REPLACE FUNCTION execute_system(command VARCHAR2,timeout NUMBER DEFAULT 10) RETURN NUMBER IS status NUMBER; result VARCHAR2(20); command_code NUMBER; pipe_name VARCHAR2(30); BEGIN pipe_name := DBMS_PIPE.UNIQUE_SESSION_NAME; DBMS_PIPE.PACK_MESSAGE('SYSTEM'); DBMS_PIPE.PACK_MESSAGE(pipe_name); DBMS_PIPE.PACK_MESSAGE(command); status := DBMS_PIPE.SEND_MESSAGE('daemon', timeout); IF status <> 0 THEN RAISE_APPLICATION_ERROR(-20010, 'Execute_system: Error while sending. Status = ' || status); END IF; status := DBMS_PIPE.RECEIVE_MESSAGE(pipe_name, timeout); IF status <> 0 THEN RAISE_APPLICATION_ERROR(-20011, 'Execute_system: Error while receiving. Status = ' || status); END IF; DBMS_PIPE.UNPACK_MESSAGE(result); IF result <> 'done' THEN RAISE_APPLICATION_ERROR(-20012, 'Execute_system: Done not received.'); END IF; DBMS_PIPE.UNPACK_MESSAGE(command_code); DBMS_OUTPUT.PUT_LINE('System command executed. result = ' || command_code); RETURN command_code; END execute_system;2.MSSQL 可藉由 Extend Store Procedure 呼叫外部程式 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=23854 引言: 現在的問題是能在不更改甲 App 的情況下 而當甲 App 將資料新增至 Oracle 後 乙 App 能馬上得知, 且乙 App 不是隨時去檢查 DataSet 是否有異動 這情況下可能做到嗎?甲 App 不動的情況下, 沒有法度了 ! 或許從 Database Open Client Net Library 進手可能還有希望, 不過困難度似乎很高. 不要稱我為前輩,我會歹勢 |
hagar
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
hagar
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
Mickey
版主 ![]() ![]() ![]() ![]() ![]() 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
引言: 再請教一下大家 Oracle 的內建套裝程式(Built-in Packages) 是買 Oracle 的時候就有, 還是要另外買呢? 謝謝!有 ! Oracle 算是滿大方的. 好像是灌 Oracle SQL Server 才有. %ORACLEHOME%/rdbms/admin/ 下, 不是所有的 Package , 在 Install 時都會 Create, 且有一部份是經過 Oracle PL/SQL Warpper Utility encode 的 plb file. 我想,有一些 Package 是為了要給 OEM (Oracle Enterprise Manager) 用的, 不是給一般 Developer 使用. /* 使用中文很辛苦,中華男兒當自強 */ |
pgdennis
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
引言:引言: 那請問一下, Oracle 的 Trigger 中 可以呼叫外部程式或傳送訊息給外部程式?1.據我所知, Oracle 沒有直接這樣做的機制, 但 Oracle 又提供一個很有趣的 package "DBMS_PIPE" 去執行 command shell, 以下是一段 Sample PL/SQL , 我沒驗證過,不知能不能 work.CREATE OR REPLACE FUNCTION execute_system(command VARCHAR2,timeout NUMBER DEFAULT 10) RETURN NUMBER IS status NUMBER; result VARCHAR2(20); command_code NUMBER; pipe_name VARCHAR2(30); BEGIN pipe_name := DBMS_PIPE.UNIQUE_SESSION_NAME; DBMS_PIPE.PACK_MESSAGE('SYSTEM'); DBMS_PIPE.PACK_MESSAGE(pipe_name); DBMS_PIPE.PACK_MESSAGE(command); status := DBMS_PIPE.SEND_MESSAGE('daemon', timeout); IF status <> 0 THEN RAISE_APPLICATION_ERROR(-20010, 'Execute_system: Error while sending. Status = ' || status); END IF; status := DBMS_PIPE.RECEIVE_MESSAGE(pipe_name, timeout); IF status <> 0 THEN RAISE_APPLICATION_ERROR(-20011, 'Execute_system: Error while receiving. Status = ' || status); END IF; DBMS_PIPE.UNPACK_MESSAGE(result); IF result <> 'done' THEN RAISE_APPLICATION_ERROR(-20012, 'Execute_system: Done not received.'); END IF; DBMS_PIPE.UNPACK_MESSAGE(command_code); DBMS_OUTPUT.PUT_LINE('System command executed. result = ' || command_code); RETURN command_code; END execute_system;2.MSSQL 可藉由 Extend Store Procedure 呼叫外部程式 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=23854引言: 現在的問題是能在不更改甲 App 的情況下 而當甲 App 將資料新增至 Oracle 後 乙 App 能馬上得知, 且乙 App 不是隨時去檢查 DataSet 是否有異動 這情況下可能做到嗎?甲 App 不動的情況下, 沒有法度了 ! 或許從 Database Open Client Net Library 進手可能還有希望, 不過困難度似乎很高. 不要稱我為前輩,我會歹勢
------
星期一,二...無窮迴圈@@ |
Mickey
版主 ![]() ![]() ![]() ![]() ![]() 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |