oracle基于dblink创建视图,【案例】Oracle dblink 数据库连接dblink insert操作数据类型发生改变...
天萃荷凈
開發DBA反映Oracle數據庫兩庫之間通過dblink相連。在使用DML語句insert插入數據時操作的數據類型發生了改變
1.Oracle insert列屬性
[oracle@saas-xunzhi-db1 ~]$ sqlplus testga/testga
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jan 12 16:26:56 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> desc t_oracleplus;
Name Null? Type
----------------------------------------- -------- ----------------------------
PROCESS_INSTANCE_ID NOT NULL NUMBER(10)
STATUS_NEW NUMBER
PACKAGE_NAME VARCHAR2(50)
SQL> desc wf_proc_inst@oldmoa
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER(10)
NAME VARCHAR2(500)
PROC_ID NOT NULL NUMBER(10)
PARE_INST_ID NOT NULL NUMBER(10)
PARE_ACTI_ID NOT NULL NUMBER(10)
INST_CREATOR VARCHAR2(40)
CREAT_DATE DATE
STATUS CHAR(1)
ATT1 NUMBER(10)
ATT2 VARCHAR2(255)
SEQVALUE VARCHAR2(50)
從這里可以看出,原表的status列是char,而目標表的STATUS_NEW列是number類型
2.通過Oralce dblink查詢列值
SQL> select t.inst_id as ID,
2 case w.status
3 when '0' then
4 4
5 when '2' then
6 3
7 else
8 1
9 end as status_new,
10 p.name as PACKAGE_NAME
11 from wf_proc_inst@oldmoa i
12 left join wf_proc_info_inst@oldmoa t on t.inst_id = i.id
13 left join wf_proc_type@oldmoa p on t.type_id = p.id
14 left join wf_proc_inst@oldmoa w on t.inst_id = w.id
15 where t.inst_id = i.id
16 and t.proc_id <> 53
17 and t.is_ok = 1
18 AND t.inst_id <= 4837
19 AND t.inst_id>=4735;
ID STATUS_NEW PACKAGE_NAME
---------- ---------- --------------------------
4755 3 呈批處理
4836 3 公文處理
從這里可以看出來,case工作正常,傳入的char類型,通過case轉換為number類型
3.使用Oracle dblink插入數據并查詢
SQL> INSERT INTO t_oracleplus
2 select t.inst_id as ID,
3 case w.status
4 when '0' then
5 4
6 when '2' then
7 3
8 else
9 1
10 end as status_new,
11 p.name as PACKAGE_NAME
12 from wf_proc_inst@oldmoa i
13 left join wf_proc_info_inst@oldmoa t on t.inst_id = i.id
14 left join wf_proc_type@oldmoa p on t.type_id = p.id
15 left join wf_proc_inst@oldmoa w on t.inst_id = w.id
16 where t.inst_id = i.id
17 and t.proc_id <> 53
18 and t.is_ok = 1
19 AND t.inst_id <= 4837
20 AND t.inst_id>=4735;
2 rows created.
SQL> commit;
Commit complete.
SQL> col package_name for a10
SQL> select * from t_oracleplus;
PROCESS_INSTANCE_ID STATUS_NEW PACKAGE_NA
------------------- ---------- ----------
4755 1 呈批處理
4836 1 公文處理
這里出現異常,懷疑case中傳入的值,都走到else那邊了,懷疑是在使用dblink 的時候,char的類型發生的改變,轉為了number,導致case匹配失敗,所以走到else。
4.在Oracle dblink端創建視圖,插入數據
SQL> CREATE VIEW GZZJ.v_oracleplus
2 AS
3 select t.inst_id as ID,
4 case to_char(w.status)
5 when '0' then
6 4
7 when '2' then
8 3
9 else
10 1
11 end as status_new,
12 p.name as PACKAGE_NAME
13 from GZZJ.wf_proc_inst i
14 left join GZZJ.wf_proc_info_inst t on t.inst_id = i.id
15 left join GZZJ.wf_proc_type p on t.type_id = p.id
16 left join GZZJ.wf_proc_inst w on t.inst_id = w.id
17 where t.inst_id = i.id
18 and t.proc_id <> 53
19 and t.is_ok = 1
20 AND t.inst_id <= 4837
21 AND t.inst_id>=4735;
View created.
SQL> insert into t_oracleplus
2 select * from v_oracleplus@oldmoa;
2 rows created.
SQL> commit;
Commit complete.
SQL> select * from t_oracleplus;
PROCESS_INSTANCE_ID STATUS_NEW PACKAGE_NA
------------------- ---------- ----------
4755 3 呈批處理
4836 3 公文處理
通過遠程視圖,接觸數據類型發生改變異常(懷疑是dblink 在insert時候,char數據類型變成了number,但是未得到官方或者權威的確認)
--------------------------------------ORACLE-DBA----------------------------------------
最權威、專業的Oracle案例資源匯總之【案例】Oracle dblink 數據庫連接dblink insert操作數據類型發生改變
總結
以上是生活随笔為你收集整理的oracle基于dblink创建视图,【案例】Oracle dblink 数据库连接dblink insert操作数据类型发生改变...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle先删后建,oracle 建表
- 下一篇: oracle flex cluster,