Oracle:UPDATE语句导致ORA-00933错误(Oracle: UPDATE statement causes ORA-00933 error)
任何人都可以看到这个陈述有什么问题吗? 我尝试了一段时间来修复它,但无济于事,我在网上发现的答案坚持我需要删除ORDERBY语句,这是我没有使用的。
BEGIN
UPDATE Tags
SET MaskReasonId = v_MaskReasonId,
AppliedTime = v_AppliedTime,
ExpireTime = v_ExpireTime,
UserId = v_UserId,
ClientNode = v_ClientNode,
CommentId = v_CommentId
FROM Tags
WHERE Tag = v_sTag OR Tag = v_Tag;
END;
Can anyone see what's wrong with this statement? I've tried for a while to fix it but to no avail, and the answers I've found on the web insist I need to remove an ORDERBY statement, something I'm not using.
BEGIN
UPDATE Tags
SET MaskReasonId = v_MaskReasonId,
AppliedTime = v_AppliedTime,
ExpireTime = v_ExpireTime,
UserId = v_UserId,
ClientNode = v_ClientNode,
CommentId = v_CommentId
FROM Tags
WHERE Tag = v_sTag OR Tag = v_Tag;
END;
原文:https://stackoverflow.com/questions/12154984
更新时间:2019-09-22 03:49
最满意答案
Oracle不支持更新语句中的“FROM”构造,请尝试以下操作:
BEGIN
UPDATE Tags
SET MaskReasonId = v_MaskReasonId,
AppliedTime = v_AppliedTime,
ExpireTime = v_ExpireTime,
UserId = v_UserId,
ClientNode = v_ClientNode,
CommentId = v_CommentId
WHERE EXISTS (SELECT * FROM Tags WHERE Tag = v_sTag OR Tag = v_Tag);
END;
Oracle does not support the "FROM" construct in the update statement, try this:
BEGIN
UPDATE Tags
SET MaskReasonId = v_MaskReasonId,
AppliedTime = v_AppliedTime,
ExpireTime = v_ExpireTime,
UserId = v_UserId,
ClientNode = v_ClientNode,
CommentId = v_CommentId
WHERE EXISTS (SELECT * FROM Tags WHERE Tag = v_sTag OR Tag = v_Tag);
END;
2012-08-28
相关问答
您不需要在查询结尾处使用分号,也许它与此有关 You don't need the semicolon at the end of the query, maybe it has something to do with that
Oracle不支持更新语句中的“FROM”构造,请尝试以下操作: BEGIN
UPDATE Tags
SET MaskReasonId = v_MaskReasonId,
AppliedTime = v_AppliedTime,
ExpireTime = v_ExpireTime,
UserId = v_UserId,
...
不要将所有字符串组合在一起。 Don't combine the, strings put all in one.
对我来说,你似乎错过了一个; 两个陈述之间: insert into ps_tl_compleave_tbl values('2626899', 0, TO_DATE('01/01/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '52', TO_DATE('01/01/2002', 'MM/DD/YYYY'), 16.000000, 24.000) ; insert into ps_tl_compleave_tbl values('4327142', 0, TO_DA
...
你的语法是正确的。 只是在SQL语句的末尾错过了一个分号。 工作示例: http : //sqlfiddle.com/#!4 /107f82 / 2/2 (CREATE表语句最后错过了一个')' You're Syntax is correct. Just missing an Semicolon at the end of the SQL-Statement. Working Example: http://sqlfiddle.com/#!4/107f82/2/0 (the CREATE Tab
...
您总是可以尝试将2个语句包装在PL / SQL匿名块中(确保不要忘记任何所需的半冒号)。 begin
insert into ...;
insert into ...;
end;
从技术上讲,它应该被视为一个单一的陈述,应该有效。 bean id="mysqlItemWriter"
class="org.springframework.batch.item.database.JdbcBatchItemWriter">
遗憾的是,没有简单的方法来实现这一目标。 通常,参数化SQL需要理解的一件事是绑定参数只能用于值,例如字符串,数字或日期。 您不能在其中放置SQL,例如列名或WHERE子句。 一旦数据库具有SQL文本,它将尝试解析它并确定它是否有效,并且它将在不查看绑定参数值的情况下执行此操作。 没有所有值,它将无法执行SQL。 SQL字符串SELECT * FROM TEMP_VIEW :1永远不会有效,因为Oracle不希望值立即跟随FROM TEMP_VIEW 。 您需要将SQL构建为字符串,并同时构建绑定
...