oracle错误码00933,Oracle:UPDATE语句导致ORA-00933错误(Oracle: UPDATE statement causes ORA-00933 error)...

这篇博客讨论了在Oracle数据库中遇到ORA-00933错误的问题,该错误通常与UPDATE语句中的语法有关。作者指出,错误可能由于在UPDATE语句中使用了不支持的FROM子句。解决方案是使用子查询和EXISTS关键字来重构UPDATE语句。博客还包含了其他可能的语法错误和建议,如删除不必要的分号,以及在PL/SQL块中正确地包裹多个语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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构建为字符串,并同时构建绑定

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值