業務需求修改某條線路的軌跡,資料庫已經是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 整型,是乙個整數,正或負,沒有...