PostgreSQL是否支持;选择。。。更新…”的信息;SQL?
我目前正在使用带有JDBC驱动程序的“PostgreSQL 9.0.4”数据库:“PostgreSQL-9.0-801.jdbc4.jar” 我使用“SELECT…FOR UPDATE OF…”子句实现了以下JDBC SQL,该子句检索列值(long)并通过在同一事务中递增来更新值。PostgreSQL是否支持;选择。。。更新…”的信息;SQL?,postgresql,Postgresql,我目前正在使用带有JDBC驱动程序的“PostgreSQL 9.0.4”数据库:“PostgreSQL-9.0-801.jdbc4.jar” 我使用“SELECT…FOR UPDATE OF…”子句实现了以下JDBC SQL,该子句检索列值(long)并通过在同一事务中递增来更新值。 我需要返回长值,因此我需要使用SELECT Sql final PreparedStatement preparedStatement = _connection.prepareStatement(
我需要返回长值,因此我需要使用SELECT Sql
final PreparedStatement preparedStatement = _connection.prepareStatement(
"select value from sequence where table_name='JOB' for update of value",
ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
long ret;
try {
final ResultSet resultSet = preparedStatement.executeQuery();
resultSet.next();
ret = resultSet.getLong(1);
resultSet.updateLong(1, ret + 1);
resultSet.updateRow();
} catch (SQLException ex) {
ex.printStackTrace();
}
finally {
resultSet.close();
preparedStatement.close();
}
return ret;
所有其他数据库,例如MySQL、Oracle、MS-SQL、Derby都可以很好地使用这种SQL,但PostgreSQL总是抛出以下异常
org.postgresql.util.PSQLException: ERROR: relation "value" in FOR UPDATE/SHARE clause not found in FROM clause
Position: 68
我的表“sequence”中有正确创建的“value”列,因此这可能不是臭名昭著的区分大小写问题
这是否意味着Postgres不支持“选择…更新…”SQL语法?
在这种情况下,实现相同效果的最佳方式是什么(即选择并使用相同的事务更新)
非常感谢,是的。它是受支持的。但是语法是
用于更新[表格名称[,…][NOWAIT]
您可以在此处看到更多信息:
是-它可以工作。实际上,我还必须指定“table_name”列作为SELECT语句的一部分。这是最新的声明。“从序列中选择值、表名,其中表名='JOB'用于序列更新”。谢谢。