前2天需要做個接口,用DBLINK方式調用MES的數據庫視圖,於是就上網查了下,結果還是遇到了不少問題。
工具/原料
ORCAL數據庫,PL/SQL,ECLIPSE
方法/步驟
1.首先在本機數據庫上創建服務:
2.創建dblink:
在oracle安裝目錄下找到tnsnames.ora;
E:\oracle\product\10.2.0\db_1\NETWORK\ADMIN
打開tnsnames.ora文件在裡面添加如下信息並保持;
添加類似這樣的格式代碼:
YMMES = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.129.20)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = YMMES) ) )
在PL/SQL等數據庫語句執行軟件裡執行類似語句
--創建dblink sql語句create public database link net_link connect to 用戶名 identified by 密碼 using 'YMMES';
--刪除dblink sql語句
DROP PUBLIC database link net_link
--創建dblink視圖
SELECT * FROM [email protected]_link where rownum<=100 ;
--創建本地視圖引用dblink視圖
create or replace view orderview as SELECT * FROM [email protected]_link;
--查詢本地試圖可以查出,結果沒問題
select ORDER_NO '$' MATERIAL_NO '$' PLAN_DATE '$' BOMNO '$' ORDER_DATE from orderview
3.執行dblink sql語句
代碼裡面可以直接輸入
sql="select ORDER_NO '$' MATERIAL_NO '$' PLAN_DATE '$' BOMNO '$' ORDER_DATE from orderview";
如果你的系統封裝了查詢方法或框架基於hibernate,那就得自己創建一個實例化的對象ordeview,配置對象屬性,然後將查詢出來的方法接收為
List
然後遍歷將contents的值賦給p.
例如:
for (Map
OrderView row = new OrderView();
row.setId(Integer.parseInt(map.get("ORDER_ID").toString()));
row.setOrderNo(StringUtil.getObjString(map.get("ORDER_NO")));
row.setMaterialNo(StringUtil.getObjString(map.get("MATERIAL_NO")));
row.setBomNo(StringUtil.getObjString(map.get("BOMNO")));
row.setOrderDate(DateUtil.parse(StringUtil.getObjString(map.get("ORDER_DATE")), DateUtil.PATTERN_DATETIME_YYYY_MM_DD_HH_MM_SS));
row.setPlanDate(DateUtil.parse(StringUtil.getObjString(map.get("PLAN_DATE")), DateUtil.PATTERN_DATETIME_YYYY_MM_DD_HH_MM_SS)); orderList.add(row);
}
查詢方法返回最終集合:return p;
注意事項
本方法經乃項目經驗,如有雷同,純屬巧合。