【发布时间】:2018-12-10 17:53:56
【问题描述】:
我想更新一行,之后我想在 Oracle SQL 中检索整行。我正在使用的表和相应的查询如下所示。我想避免两次查询数据库。因此,我在更新后进行了选择,但我遇到了查询后显示的错误。知道如何解决这个问题吗?
CREATE TABLE mytable (
sid NUMBER NOT NULL,
eid VARCHAR(18) NOT NULL,
first TIMESTAMP,
updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
created TIMESTAMP,
status VARCHAR(30),
tid VARCHAR(18),
wid VARCHAR(18),
CONSTRAINT mytable_pk PRIMARY KEY (sid, eid)
ENABLE
);
BEGIN
UPDATE mytable SET wid=?, status=? WHERE sid=?;
SELECT * FROM mytable WHERE sid=?;
END;
错误:
java.sql.SQLException
ORA-06550: line 3, column 7:
PLS-00428: an INTO clause is expected in this SELECT statement
对应的Java代码片段:
PreparedStatement statement = prepareStatement(sql);
int index = 0;
statement.setString(index++, newWid);
statement.setString(index++, newStatus);
statement.setInt(index++, sid);
statement.setInt(index++, sid);
ResultSet results = statement.executeQuery();
if (results.next()) {
Record rec = new Record();
fill(rec, results);
}
return record;
【问题讨论】:
-
在您的示例中,您仍在查询数据库两次,只是在匿名 PL/SQL 块中。您打算从哪里调用它,您将如何处理返回的行?
-
PL/SQL 要求您 SELECT STUFF INTO 一个变量。这就是错误消息告诉您的内容。
标签: sql oracle plsql sql-update sql-returning