org.springframework.jdbc.BadSqlGrammarException:PreparedStatementCallback;
badSQL grammar [SELECT TO_CHAR(TRUNC(SYSDATE,dd)-TRUNC(op_time,dd))overday FROM tb_xxx_xxxx WHERE caseno=? ];
nestedexception is com.aliyun.polardb.util.PSQLException:
ERROR:function to_char(interval) does not exist
Hint:No function matches the given name and argument types. You might needto add explicit type casts.
--直連檢查sql報錯問題
polardb執行
oracle執行
報錯信息需要類型轉換,那就轉換一下
告知開發側看能否更改代碼解決。
過了一會,開發發來截圖,一個模塊就有400多,工作量太大,影響進度,看來還得換其他辦法。
先看看查詢實現原理:
1.trunc后返回類型是timestampwithout time zone
2.兩個相減返回值interval類型
3.查看to_char輸入和輸出返回類型
通過上面3步可以明確知道之前修改新加DD實現的邏輯,但是應用側整改工作量太大,不現實。
既然第3步工作量大,實現不了,那就在第1步或第2步上做做文章。
嘗試修理第2步:
減號-的左右都是timestampwithout time zone,返回值類型就是interval
到這就明了了,自己定義一個函數timestamp_mi,讓他返回值不是interval,而是text就ok啦。
下面開始解決問題:
1.日期格式相減功能實現的sql
SELECT(date_part(epoch,sysdate)-date_part(epoch,sysdate-10))/86400,pg_typeof(date_part(epoch,sysdate)-date_part(epoch,sysdate-10)/86400);
2.創建上面實現功能的sql對應的函數
語法如下:
createor replace function ywjhxt.timestamp_mi (timestamp without time zone,timestamp without time zone) returns double precision as $$
SELECT(date_part(epoch,$1)-date_part(epoch,$2))/86400;
$$language sql;
3.創建新的運算符實現邏輯
createoperator ywjhxt.-(leftarg=timestamp without timezone,rightarg=timestamp without timezone,procedure=ywjhxt.timestamp_mi);
4.檢驗是否實現功能
5.意外情況處理
奇了怪了,為啥沒生效。繼續分析,
查看操作符’-’信息:
selectoprname,oprleft::regtype,oprright::regtype,oprresult::regtype,oprcodefrom pg_operator where oprname=- andoprleft::regtype::text=timestamp without time zone andoprright::regtype::text=timestamp without time zone;
原來有兩個timestampwithout time zone的值進行相減時,有兩個實現方式,為啥他選了第一個呢?
嘗試去官方文檔找答案,還真有。。。
再嘗試一下,發現得到了想要的結果,但是這不符合需要啊,還是要改動應用代碼。
繼續往下翻文檔,又有驚喜。
setsearch_path="$user", public,pg_catalog;
至此,問題徹底解決。本次分享到此結束,下次再見。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/130154.html
摘要:李飛飛花名飛刀,阿里巴巴集團副總裁,高級研究員,達摩院首席數據庫科學家,阿里云智能事業群數據庫產品事業部負責人,杰出科學家。是阿里云的云原生數據庫,目前已有非常深厚的技術積累。 阿里妹導讀:云計算大潮來襲,傳統數據庫市場正面臨重新洗牌的情境,包括云數據庫在內的一批新生力量崛起,動搖了傳統數據庫的壟斷地位,而由云廠商主導的云原生數據庫則將這種改變推向了高潮。 云時代的數據庫將面臨怎樣的...
摘要:近日,阿里云正式對外發布了全新一代自研關系型數據庫。而他認為,在未來年內,沒有自研數據庫的云計算廠商將會被逐漸淘汰出局。 近日,阿里云正式對外發布了全新一代自研關系型數據庫POLARDB。值得注意的是,POLARDB并不是基于開源數據庫MySQL之上研發的分支,而且基于第三代分布式共享存儲架構,創新實現企業級OLTP與OLAP一體化數據庫系統整體設計。這意味著,在行業還在使用第一代,第二代架...
摘要:本文整理了年月國產數據庫大事件和重要產品發布消息。柏睿數據庫加速安全卡面向全球重磅發布。月日,在全球數字經濟大會成果發布會上,中國移動北京分公司與國產數據庫領域新銳企業柏睿數據簽署戰略合作協議。本次大賽主要面向全國愛好數據庫的高校學生。 本文整理了2021年8月國產數據庫大事件和重要產品發布消息。目錄8月國產數據庫大事記TOP108月國產數據庫大事記時間線產品/版本發布兼容認證8月排行榜新增...
摘要:不過,云來了,以阿里云為代表的云服務商攜云原生數據庫發起了新一輪挑戰。實際上,阿里云數據庫技術也得到國際咨詢機構的認可,在數據庫魔力象限中,阿里云成為國內首個入選的科技公司。第三個是數據的安全隱私保護,這是阿里云數據庫一直不敢放松的。數據庫市場形成今天的格局已經很久了,商業數據庫為王,這幾乎沒有變過。不過,云來了,以AWS、阿里云為代表的云服務商攜云原生數據庫發起了新一輪挑戰。與以往歷次的挑...
摘要:近日,阿里云正式對外發布了全新一代自研關系型數據庫。而他認為,在未來年內,沒有自研數據庫的云計算廠商將會被逐漸淘汰出局。 近日,阿里云正式對外發布了全新一代自研關系型數據庫POLARDB。值得注意的是,POLARDB并不是基于開源數據庫MySQL之上研發的分支,而且基于第三代分布式共享存儲架構,創新實現企業級...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20