1. 程式人生 > >oracle中按日期查詢報錯問題和merge into語句的

oracle中按日期查詢報錯問題和merge into語句的

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