2012-12-26 110 views
0

我認爲update語句需要數據已經存在。sql更新語句 - 如果記錄不存在,插入數據?

我支持一個Java應用程序。以前的某些代碼的開發人員使用delete語句清除記錄,然後使用update語句將數據重新插入表中。

是否可以使用更新語句將數據插入或更新到表中?

db是oracle express。這不應該有所作爲。

+3

簡單的UPDATE不能插入任何新行。但也許還有更多。你能顯示聲明和周圍的代碼嗎? – Thilo

回答

1

您可以嘗試使用MERGE聲明獲得相同的結果。 使用MERGE語句,您可以將新記錄插入表中或更新數據是否已存在。

請查找MERGE語句的語法。

MERGE INTO <table_name> 
USING <table_view_or_query> 
ON (<condition>) 
WHEN MATCHED THEN <update_clause> 
DELETE <where_clause> 
WHEN NOT MATCHED THEN <insert_clause>; 

也許你可以提供關於你問題的更多細節。我假設這是你所要求的。

0

查詢是org.hibernate.Query的一個實例。查看hibernate文檔以查詢。它的更新應該拋出一個異常,但事實並非如此。可以這樣的事實,即代碼不刷新緩衝區是更新不拋出異常的原因?

String deleteQueryString = String.format("delete FROM %s WHERE personId = %s and deptId = %s and active = true", table, person.getId(),dept.getId()); 

Query deleteQuery = Persistence.reportContext().session().createQuery(deleteQueryString); 
int deletedCount = deleteQuery.executeUpdate(); 
log.debug(String.format("%20s (%4s): %s", "delete query", deletedCount, deleteQueryString)); 

String updateQueryString = String.format("update %s set activeSet = true WHERE personId = %s and deptId = %s and activeSet = false", table, person.getId(), dept.getId()); 

Query updateQuery = Persistence.reportContext().session().createQuery(updateQueryString); 
int updatedCount = updateQuery.executeUpdate(); 
相關問題