1. 程式人生 > >oracle建立檢視包含clob欄位,報錯:資料型別不一致:應為-,但卻獲得CLOB

oracle建立檢視包含clob欄位,報錯:資料型別不一致:應為-,但卻獲得CLOB

在oracle中建立檢視的時候,語句中包含有clob型別的欄位。檢視建立語句大概如下:

CREATE OR REPLACE FORCE VIEW "T_PROJECTS" ("ID", "NAME","DSC_INFO") AS
(
select a.id,a.name,'' DSC_INFO from t_project_a a
union
select b.id,b.name,b.dsc_info from t_project_b b
union
select c.id,c.name,c.dsc_info from t_project_c c
);
但在執行的時候卻報錯了,錯誤為:
資料型別不一致:應為-,但卻獲得CLOB
檢查以後發現,dsc_info欄位為clob型別,起初以為是clob型別初始化的問題,於是把語句改為
CREATE OR REPLACE FORCE VIEW "T_PROJECTS" ("ID", "NAME","DSC_INFO") AS
(
select a.id,a.name,empty_clob() DSC_INFO from t_project_a a
union
select b.id,b.name,b.dsc_info from t_project_b b
union
select c.id,c.name,c.dsc_info from t_project_c c
);
執行仍然報錯。然後查資料:oracle中clob實際上是使用char來儲存資料的,所以在對clob欄位進行查詢時為了保證正確應該對欄位進行轉換,轉換成char,並給欄位增加別名。轉換成char的函式為:to_char(clob欄位名)。最後,sql改為:
CREATE OR REPLACE FORCE VIEW "T_PROJECTS" ("ID", "NAME","DSC_INFO") AS
(
select a.id,a.name,'' DSC_INFO from t_project_a a
union
select b.id,b.name,to_char(b.dsc_info) DSC_INFO from t_project_b b
union
select c.id,c.name,to_char(c.dsc_info) DSC_INFO from t_project_c c
);
執行成功,以作記錄。