数据库小白求教,用oracle SQL developer提交匿名块之后,数据没有任何变化是为什么

壹四 2017-03-22 06:09:35
求教各位前辈,我用最简单的update之后,在没commit之前查询表,数据都是已经更新了的,但是我用下面这段代码,不管是commit之前还是之后,数据都毫无变化,这是为什么.....代码是一段给员工加薪的代码


...全文
639 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
壹四 2017-03-29
  • 打赏
  • 举报
回复
引用 3 楼 dd215130268 的回复:
是 if v_job = 'clerk' 这些判断条件没有对应记录吗 或者是大小写问题
我今天才发现真的就是这个大小写问题。。。天啊我太蠢了。
Tiger_Zhao 2017-03-27
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 w67995822 的回复:]是的,我在当前窗口查询到的数据无变化,递交之后依然无变化,所以我真的很疑惑= =[/Quote]
再加个 else 分支,加一句 put_line()。
有可能 v_job 一个 if 都不匹配(比如大小写不同、有空格之类的),你还在那里输出“成功加薪”。
jdsnhan 2017-03-24
  • 打赏
  • 举报
回复
引用 8 楼 w67995822 的回复:
[quote=引用 4 楼 jdsnhan 的回复:] 1、可以合并到一个sql中,不用游标 2、c_clerk ,c_manager 这样的参数应定义成number
update emp set sal = sal * (1+ (case job when 'clerk' then c_clerk when  c_saleman then 0.8 else c_manager end))
您好,我定义成number之后数据依然毫无变化,如果不用游标,怎么提取每一个人的job呢= =[/quote] 本身就是逐行处理,你只需要设置好你的条件,而不用显性的遍历所有行。 示例sql就是我写的那个
壹四 2017-03-24
  • 打赏
  • 举报
回复
引用 11 楼 Tiger_Zhao 的回复:
你真的递交了吗? 我记得Oracle的Developer自动给当前会话套了一个大事务。 你在当前事务窗口可以查询到自己的更新数据; 但是不点递交按钮的话,在其它会话中是看不到这些更新的。
是的,我在当前窗口查询到的数据无变化,递交之后依然无变化,所以我真的很疑惑= = 然后我在新的窗口中用了最简单的update语句,对选定的某个编号的员工进行直接加薪,然后查询是有变化的。
Tiger_Zhao 2017-03-24
  • 打赏
  • 举报
回复
你真的递交了吗?
我记得Oracle的Developer自动给当前会话套了一个大事务。
你在当前事务窗口可以查询到自己的更新数据;
但是不点递交按钮的话,在其它会话中是看不到这些更新的。
壹四 2017-03-24
  • 打赏
  • 举报
回复
引用 9 楼 jdsnhan 的回复:
[quote=引用 8 楼 w67995822 的回复:] [quote=引用 4 楼 jdsnhan 的回复:] 1、可以合并到一个sql中,不用游标 2、c_clerk ,c_manager 这样的参数应定义成number
update emp set sal = sal * (1+ (case job when 'clerk' then c_clerk when  c_saleman then 0.8 else c_manager end))
您好,我定义成number之后数据依然毫无变化,如果不用游标,怎么提取每一个人的job呢= =[/quote] 本身就是逐行处理,你只需要设置好你的条件,而不用显性的遍历所有行。 示例sql就是我写的那个[/quote] 谢谢前辈,但是我依然不明白为什么我这段代码可以成功运行但是数据却并不会发生变化。。。
卖水果的net 2017-03-23
  • 打赏
  • 举报
回复
打印出来的日志,都是什么?
嘚嗒搬运工 2017-03-23
  • 打赏
  • 举报
回复
好长~~~~~
jdsnhan 2017-03-23
  • 打赏
  • 举报
回复
1、可以合并到一个sql中,不用游标 2、c_clerk ,c_manager 这样的参数应定义成number
update emp set sal = sal * (1+ (case job when 'clerk' then c_clerk when  c_saleman then 0.8 else c_manager end))
壹四 2017-03-23
  • 打赏
  • 举报
回复
引用 4 楼 jdsnhan 的回复:
1、可以合并到一个sql中,不用游标 2、c_clerk ,c_manager 这样的参数应定义成number
update emp set sal = sal * (1+ (case job when 'clerk' then c_clerk when  c_saleman then 0.8 else c_manager end))
您好,我定义成number之后数据依然毫无变化,如果不用游标,怎么提取每一个人的job呢= =
壹四 2017-03-23
  • 打赏
  • 举报
回复
引用 6 楼 wmxcn2000 的回复:
打印出来的日志,都是什么?



您好,日志是这样的。。我看不懂。。
蓝色蛋饼 2017-03-22
  • 打赏
  • 举报
回复
是 if v_job = 'clerk' 这些判断条件没有对应记录吗 或者是大小写问题
壹四 2017-03-22
  • 打赏
  • 举报
回复
真的跪求前辈为我解答!!
壹四 2017-03-22
  • 打赏
  • 举报
回复
代码是可以运行的,但是为什么表内的数据毫无变化。。。

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧