存储过程中的错误

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
...全文
112 11 打赏 收藏 转发到动态 举报
写回复
用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;

17,089

社区成员

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

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