天天看點

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
);
           

執行成功,以作記錄。