存储过程中的错误

j284197330 2011-05-30 11:31:23
set serveroutput on size 10000;
create or replace procedure set_sal(p_empno emp.empno%type)
as
p_sal emp.sal%type;
p_deptno emp.deptno%type;
begin
select sal , deptno into p_sal,p_deptno from emp where empno=p_empno;
case p_deptno
when 10 then update emp set p_sal=p_sal+150;
when 20 then update emp set p_sal=p_sal+200;
when 30 then update emp set p_sal=p_sal+250;
else set p_sal=p_sal+300;
end case;
commit;
exception
when no_data_found then
dbms_output.put_line('the department doesn''t exists!');
end set_sal;


警告:Warning: compiled but with compilation errors
...全文
118 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jielovehuan 2011-05-31
  • 打赏
  • 举报
回复
楼上正解
kingtiy 2011-05-30
  • 打赏
  • 举报
回复

set p_sal=p_sal+150;--sqlserver的赋值语句
p_sal:=p_sal+150;--oracle的赋值语句写法.

j284197330 2011-05-30
  • 打赏
  • 举报
回复
各位高手可以加我QQ吗?
以后一起学习,可以吗??

284197330 我的QQ
vber1010 2011-05-30
  • 打赏
  • 举报
回复
case 要返回值的可以这样,用上面一条或者这样:
create or replace procedure set_sal(p_empno emp.empno%type) as
p_sal emp.sal%type;
p_deptno emp.deptno%type;
begin
select sal,
case deptno
when 10 then
sal + 150
when 20 then
sal + 200

when 30 then
sal + 250
else
sal + 300
end
into p_sal, p_deptno
from emp
where empno = p_empno;

update emp ....

commit;
exception
when no_data_found then
dbms_output.put_line('the department doesn''t exists!');
end set_sal;
jym2002 2011-05-30
  • 打赏
  • 举报
回复
一条SQL

update emp set p_sal=decode(deptno,10,p_sal+150,20,p_sal+200,30,p_sal+250,p_sal+300) where empno=p_empno;

vber1010 2011-05-30
  • 打赏
  • 举报
回复
case when 里不能执行dml。
你用if语句替代试试
j284197330 2011-05-30
  • 打赏
  • 举报
回复
set serveroutput on size 10000;
create or replace procedure set_sal(p_empno emp.empno%type)
as
p_sal emp.sal%type;
p_deptno emp.deptno%type;
begin
select sal , deptno into p_sal,p_deptno from emp where empno=p_empno;
case p_deptno
when 10 then update emp set p_sal=p_sal+150;
when 20 then update emp set p_sal=p_sal+200;
when 30 then update emp set p_sal=p_sal+250;
else update emp set p_sal=p_sal+300;
end case;
commit;
exception
when no_data_found then
dbms_output.put_line('the department doesn''t exists!');
end set_sal;
改完后还是同样的错误
shadow1986a 2011-05-30
  • 打赏
  • 举报
回复
else set p_sal=p_sal+300;

这一句有问题。根据需要 要么改成 else update emp set p_sal=p_sal+300; 要么是
else p_sal:=p_sal+300;
秋雨飘落 2011-05-30
  • 打赏
  • 举报
回复
else set p_sal=p_sal+300;

这里有ELSE,你的IF呢
vber1010 2011-05-30
  • 打赏
  • 举报
回复
还是老兵厉害,我还以为不能执行dml语句。原来是可以的啊。。。
tangren 2011-05-30
  • 打赏
  • 举报
回复
你的业务逻辑是要做什么

create or replace procedure set_sal(p_empno emp.empno%type)
as
p_sal emp.sal%type;
p_deptno emp.deptno%type;
begin
select sal , deptno into p_sal,p_deptno from emp where empno=p_empno;
case p_deptno
when 10 then update emp set sal=p_sal+150; --update中set后面应该是要被更新的列名
when 20 then update emp set sal=p_sal+200; --同上
when 30 then update emp set sal=p_sal+250; --同上
else update emp set sal=p_sal+300; --少了update emp
end case;
commit;
exception
when no_data_found then
dbms_output.put_line('the department doesn''t exists!');
end set_sal;
慧龙照片恢复软件是一个特殊的数据恢复工具,专门用于恢复误删除、格式化、文件系统错误、分区打不开等造成的照片文件丢失;支持硬盘、光盘、U盘、MP3、数码相机、手机、存储卡等存储介质。支持FAT、FAT32、NTFS、CDFS等各种分区格式,但不能恢复在NTFS分区压缩存储的文件,也不能恢复加密的文件。全盘扫描查找照片数据,不放过任何一个可恢复的照片文件。   慧龙照片恢复软件在恢复文件过程不会往源分区写入数据,因此可保证不会对源数据造成再次损害,可放心使用。软件还支持从磁盘映像文件恢复照片文件,方便进行异地数据恢复,软件本身也具有制作磁盘映像文件的功能。   本软件目前仅支持恢复JPG格式的照片文件(更多文件格式正在增加),JPG格式是最流行的数码照片文件格式,绝大多数数码相机及拍照手机均采用该格式存储照片,因此慧龙照片恢复软件能胜任绝大多数照片文件的恢复任务,照片恢复的成功率也很高。   慧龙照片恢复软件会提取照片文件的拍照时间,作为恢复出来的文件修改时间,方便恢复后对照片进行整理。只要在文件夹里选择按“修改时间”排序,照片就是按拍照的先后顺序排列了,非常方便。   提示: 不要下载软件到要恢复数据的盘符里,也不要解压文件到要恢复的盘符里,否则可能再次破坏源数据。如果是相机直接连接电脑进行数据恢复,请保证电池电量足够,免得恢复过程耗完电了,下次又要重新扫描。   为什么选择慧龙照片恢复软件?与其他数据恢复软件相比,慧龙照片恢复软件具有以下特点:   1. 逐一扫描存储扇区,寻找照片数据,提高照片文件恢复成功率;   2. 使用超简单,鼠标点击几下即可开始恢复;   3. 体积小,下载快,绿色软件,无需安装,不会在系统里留下任何垃圾;   4. 不依赖于文件系统,即使目录区、文件分配表完全损毁也能进行恢复;   5. 支持从映像文件恢复照片,因而可完全避免反复扫描对源数据造成损害;软件本身也包含制作映像文件的功能。

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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