oracle clob型別數值過長

2021-09-21 13:35:53 字數 1552 閱讀 6474

業務需求修改某條線路的軌跡,資料庫已經是clob型別了,然後當軌跡過長即string過長時會報connect reset,這可能是由於druid對字串有限制,而把引數拿出來直接去執行sql

update e_bus_stationline_contrail

set update_time = sysdate,

shape = '這是座標的json串太長就不放了'

where

lineid = 100011 and direct = 1

出現ora-01704: string literal too long的錯誤

這是因為雖然clob可以足夠可以儲存這麼長的字串,但是sql語句的語法解析對字段卻有長度限制

我的解決方法

通過宣告變數,先把這個字婦產賦值給乙個變數,然後用這個變數去merge或者update

declare 

v_clob clob:='長字串,當時length大約4k1左右';

begin

merge into e_bus_stationline_contrail

using dual

on (lineid = 100011 and direct = 1)

when matched then

update

set update_time = sysdate,

shape = v_clob

when not matched then

insert (lineid,direct,shape,update_time)

values

( 100011,

1,v_clob,

sysdate);

end;

而後放到mybatis中也有幾個注意點

首先declare需要在sql執行前宣告

即這個引數不能使用#{}引數替換而是${}直接字串替換

declare

v_clob clob:='$';

begin

merge into e_bus_stationline_contrail

using dual

on (lineid = # and direct = #)

when matched then

update

set update_time = sysdate,

shape = v_clob

when not matched then

insert (lineid,direct,shape,update_time)

values

( #,

#,v_clob,

sysdate);

end;

另外語句執行完,end前的";"也不要忽視,不然會出現

pls-00103: 出現符號 "end-of-file"在需要下列之一時。。。

看到這裡還有一種字串拼接的方法在資料庫裡嘗試了一下沒行通。。。不然把長字串轉成list後遍歷拼接也可以的叭

Java 支援Oracle CLOB型別資料

由於專案需求中有公告功能,公告中的各種樣式儲存到db中,採用clob型別字段儲存。第一步 將 oracle home jdbc lib classes2.jar拷貝到專案目錄中 第二步 引入oracle.sql.clob 第三步 存入clob,先將string轉為stringreader,將stri...

mysql數值型別

通過mysql手冊對mysql的數值資料型別進行了乙個回顧,總結如下 mysql支援所有標準sql數值資料型別。這些型別包括嚴格資料型別 integer smallint decimal numeric,以及近似數值資料型別 float real double precision。關鍵字int是in...

Python 數值型別

python中有三種數值型別 數值型別變數會在賦值時自動建立 示例 a 6 int b 8.8 float c 6j complex要驗證python 物件的型別,可使用type 函式 示例 print type a print type b print type c 整型,是乙個整數,正或負,沒有...