oracle中按日期查詢報錯問題和merge into語句的
阿新 • • 發佈:2018-11-13
1 ORA-01858 :在要求輸入數字處找到非數字字元
這兩個一起記述的主要原因是需要這樣做,且報錯了。。。
我先貼出我的sql語句來:
出錯原因是:preparedstatement在執行的時候不能把紅框內的串替換為sql中的問號,主要是to_date函式替換不了,解決辦法是將to_date函式先放到sql語句中,然後替換後面的變數,就不報這個錯誤了。
這句是直接摘抄人家的:ORA-01858 :在要求輸入數字處找到非數字字元
正確語句如下:
好了,就這樣,date查詢報錯的問題就解決了。
2 接下來看看oracle中插入或修改操作
該操作是進行插入操作或修改操作:
首先:
USING (SELECT COUNT(read_book) read_book FROM user_record WHERE"+ " uptime =to_date(\'"+date+"\','yyyy/MM/dd HH24:mi:ss') u1
這句首先統計read_book欄位中的數字是否大於0,因為如果計數為0,表示表中沒有該時間點的記錄。
接著,根據是否大於0來進行匹配,若匹配(when matched then),表示進行更新操作,若不匹配(when not matched then),表示進行插入操作。
public Integer insertOrupdateUserBooking(String date,String userno,String username) throws SQLException { DateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); String dateStr = dateformat.format(new Date()); QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource()); String sql = "MERGE INTO user_record oumd" + " USING (SELECT COUNT(read_book) read_book FROM user_record WHERE" + " uptime =to_date(\'"+date+"\','yyyy/MM/dd HH24:mi:ss') u1" + " on (u1.read_book>0)" + " WHEN MATCHED THEN " + " UPDATE SET read_book=(u1.read_book+1),UPDATETIME=to_date(\'"+date+"\','yyyy/MM/dd HH24:mi:ss') WHERE" + " uptime =to_date(\'"+date+"\','yyyy/MM/dd HH24:mi:ss') and user_no=\'"+userno+"\'" + " and username=\'"+username+"\'" + " WHEN NOT MATCHED THEN" + " INSERT (uptime ,user_no,USERNAME,read_book,CREATETIME)" + " VALUES(to_date(\'"+date+"\','yyyy/MM/dd HH24:mi:ss'),\'"+userno+"\',\'"+username+"\',1,to_date(\'"+dateStr+"\','yyyy/MM/dd HH24:mi:ss'))"; int result = runner.update(sql); return result; }