2022-08-22
关于select for update 和 update 语句的潜在区别
各位专家,
小弟今天碰到一个奇葩的问题。
我们有一个生产系统,在前端通过web提交的表达保存到数据库的时候,没有出现任何异常,然后来了个需求,需要在数据库对这个提交的内容进行修改,实际上修改的内容很简单,就是把一个“2021”修改成“2022”. 我是通过pl/sql 通过select for update的方式进行,奇葩的问题就来了,无论我怎么弄,它始终报如下的错误:

我一直搞不懂这个ORA-01480 到底是个啥东西,网上有说什么半个引号的,什么乱七八糟的,我也懒得说了。说说奇葩的事情,出现问题的这个字段是 varchar2(4000) 类型的。我一开始怀疑是字段内容的长度是否超过了4000个,但问题是,我只是修改了一个2021到2022,没添加没减少的,怎么提交就报这个呢,而且这个错误他也不是字符长度超过范围的那个代码呀?
然后我采用Update语句的方式直接进行更新,结果就成功更新进数据库了。
我的疑惑就是:
1. 对于这种varchar2(4000) 的字段,前端网页在提交的时候,很明显超过了4000个字符,他是怎么提交成功的(我把内容弄到notepad++后,发现length确实超过了4000,然后我通过select for update,直接删掉一大段儿的内容,确实也能提交成功).
2. 为什么update语句,就可以直接提交成功,他都不检查内容是否有超过范围么?
3. select for update 难道和直接 update 方式,存在什么隐藏的秘密?
望各位大哥解惑!感激不尽!oracle 数据库,11204, 客户端是PL/SQL 8
收藏
分享
2条回答
默认
最新
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏

评论
