台灣最大程式設計社群網站
線上人數
1068
 
會員總數:245214
討論主題:189087
歡迎您免費加入會員
討論區列表 >> PHP >> 查詢不同Oracle資料庫
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
查詢不同Oracle資料庫
價值 : 5 QP  點閱數:595 回應數:4

樓主

Leo
門外漢
0 20
920 61
發送站內信

我這邊有個使用PHP查詢Oracle資料庫的規劃

但因為隸屬不同的A、B資料庫(同一個Server但不同登入資訊)

不知該怎麼操作

查詢流程大致如下
1. 查詢A資料庫
2. 以A資料庫查詢出的結果當條件,查詢B資料庫
3. 將結果顯示出來

若是以SQL語法表示,大致如下


主要是卡在A、B資料庫該如何互相JOIN

初步想到的方法(僅有想法不清楚PHP語法如何操作)
1. 直接用PHP語法操作A、B資料庫
2. 將A資料庫查詢出來的結果,寫入並建立B資料庫的一個TEMP TABLE,直接用B資料庫進行兩表單JOIN(多人以不同查詢條件進行查詢作業,不確定可行性)
3. A資料庫查詢出來的結果寫入陣列,再讀出陣列的值,至B資料庫查詢(好像有點複雜...)


煩請各位協助解惑

如有描述不清的地方

請再告知

感謝!

搜尋相關Tags的文章: [ 不同Oracle資料庫 ] ,
本篇文章發表於2016-02-04 14:09
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
基本上來講。不同資料庫的連結方式。並無法用單一sql語法來處理的。
還是只能分開兩個語法處理。

但一般人解決的方式會用如下處理

1.使用資料庫的額外事件。搭配函數處理方式。
只是這需要資料庫在同主機上才有可能做到。
且開發一個sql函數也不是一件簡單的事。

2.分開兩個語法:
也就是說先將a資料庫處理好後。取得資料之後。再教給b資料庫再處理
這樣子是比較簡單的處理方式。只是對主機效能並不好。

3.採用同步機制:
也就是說讓a表內的資料也同步一份到b表上。
這樣就可以在b表上用一個sql命令來處理。

4.登入帳號統一。都用同一個帳號。這樣在用db物件時。就可以來宣告要跑哪一個資料庫。
才可以跑你上面的方式。

基本上我會比較建議你用第4種方案。比較簡單處理。
除非~~~~你的資料庫都是在不同主機。
那就偏向只能使用第2種方案了。
本篇文章回覆於2016-02-04 14:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

Leo
檢舉此回應
感謝版主的熱心回覆

請問如果使用上述第2種方案

我先將A資料庫查詢出來的結果

存於陣列中

我該如何進一步使用陣列結果來查詢B資料庫???

因為假設A資料庫查詢出來的結果有5筆,已存於陣列$Arr
$Arr[0][0]
$Arr[1][0]
$Arr[2][0]
$Arr[3][0]
$Arr[4][0]

我有辦法直接用SQL查詢B資料庫嗎???
類似下方這樣


網頁顯示出來的結果必須包含A資料的結果(已存於陣列中 e.g. $Arr[0][1],$Arr[0][2])

欲顯示的資訊類似下方這樣

欄位1 欄位2 欄位3 欄位4 欄位5 欄位6
Arr[0][1] Arr[0][2] [資料庫B].[表1].[欄位1] [資料庫B].[表1].[欄位2] [資料庫B].[表1].[欄位3] [資料庫B].[表1].[欄位4]


不知如此描述是否清楚

如有更好的建議作法,再請撥冗協助

謝謝!
本篇文章回覆於2016-02-04 17:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
其實沒表節構沒資料的範例。很難給你明確的答案。

正常來說抓茨a資料的值就是代表取得其判斷值了。
但如何用A資料來判斷。這個在不很了解你的需求情況下。
很難給你正確的答案。

或許你可以給個範例表跟資料。並寫出目的及結果。會比較可以給你正確的處理方式了。
本篇文章回覆於2016-02-04 18:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

Leo
檢舉此回應
整個運作大概如下

查詢資料庫A,得出4個欄位值(a,b,c,d)
e.g.
11111 test1 001 QQQ
22222 test2 003 AAA


再用查詢出來的a當條件,進一步查詢資料庫B,得出3個欄位(A,B,C)
e.g.
語法如下
SELECT A,B,C
FROM 資料庫B.資料表
WHERE 資料庫B.資料表.A IN ('11111','22222')

結果如下
11111 XXX 999
11111 OOO 888
11111 YYY 777
22222 WWW 666
22222 XXX 789


最後所要顯示的資料如下
11111 test1 001 QQQ XXX 999
11111 test1 001 QQQ OOO 888
11111 test1 001 QQQ YYY 777
22222 test2 003 AAA WWW 666
22222 test2 003 AAA XXX 789


不知此例是否清楚

再請各位協助

感謝!
本篇文章回覆於2016-02-05 13:26
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.