sql update语句 - 如果记录不存在,则插入数据?

时间:2012-12-26 02:51:40

标签: sql oracle-xe

我认为update语句要求数据已经存在。

我正在支持一个java应用程序。某些代码的前一个开发人员使用delete语句清除记录,然后使用update语句将数据插回到表中。

可以使用update语句将数据插入或更新到表中吗?

db是oracle express。这不应该有所作为。

2 个答案:

答案 0 :(得分: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>;

也许您可以提供有关您问题的更多详细信息。我假设这是你所要求的。

答案 1 :(得分:0)

Query是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();