新手上路,存储过程一问

忆轩辕 2010-01-20 05:48:44
创建一个存储过程 lowest3,对公司最低收入的前三个员工进行工资上 10% 的调整

手头暂时只有oracle express版本,用来学点基础语法=.=

create or replace procedure lowest_test
as
begin
update emp_test set sal=sal*1.1 where empno in (select empno from (select * from emp_test order by sal desc) where rownum<=3);
commit;
end lowest_test;

为啥这样写会有编译错误?
...全文
127 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
忆轩辕 2010-01-20
  • 打赏
  • 举报
回复
结贴.......超低级的错误,感谢解答
crazylaa 2010-01-20
  • 打赏
  • 举报
回复
出错了你就


警告: 创建的过程带有编译错误。

SQL> show err;
PROCEDURE LOWEST_TEST 出现错误:

LINE/COL ERROR
-------- -----------------------------------------------------------------
4/1 PL/SQL: SQL Statement ignored
9/17 PL/SQL: ORA-00942: table or view does not exist --这里会告诉你那行那个位置有错的。
SQL> create or replace procedure lowest_test
2 as

忆轩辕 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 crazylaa 的回复:]
最低收入的前三个员工进行工资上 10% 的调整

不需要desc,desc是从高到低排,这里反而给最高工资的3个人加了。。。
[/Quote]

汗一个,这个错误也犯了,感谢指出=.=

应该是asc才对,现在主要问题就是单条update语句能执行,但是放入存储过程-.-
crazylaa 2010-01-20
  • 打赏
  • 举报
回复
噢,我的不是express版本。但这没有用到高级功能啊,难道express不支持存储过程?
crazylaa 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 colacat911 的回复:]
呃,测试表名写错了,不好意思

存储过程中update语句能单独执行,就是放到存储过程中不行
[/Quote]
可以的,你看我都加出来拉:



SQL> select * from emp;

EMPNO SAL
---------- ----------
1 1.5
3 3.85
4 1.87
6 1.98

SQL> create or replace procedure lowest_test
2 as
3 begin
4 update emp
5 set sal=sal*1.1
6 where empno in (
7 select empno from
8 (
9 select * from emp order by sal
10 )
11 where rownum <=3
12 );
13 end lowest_test;
14 /

过程已创建。

SQL>
SQL> begin lowest_test; end;
2 /

PL/SQL 过程已成功完成。

SQL>
SQL> select * from emp;

EMPNO SAL
---------- ----------
1 1.65
3 3.85
4 2.06
6 2.18

SQL>
忆轩辕 2010-01-20
  • 打赏
  • 举报
回复
忘了说了,是oracle 10g的express版本,自带的SQLplus窗口就是报编译错误=.=!
crazylaa 2010-01-20
  • 打赏
  • 举报
回复
最低收入的前三个员工进行工资上 10% 的调整

不需要desc,desc是从高到低排,这里反而给最高工资的3个人加了。。。
忆轩辕 2010-01-20
  • 打赏
  • 举报
回复
呃,测试表名写错了,不好意思

存储过程中update语句能单独执行,就是放到存储过程中不行
crazylaa 2010-01-20
  • 打赏
  • 举报
回复
SQL> create or replace procedure lowest_test
2 as
3 begin
4 update emp
5 set sal=sal*1.1
6 where empno in (
7 select empno from
8 (
9 select * from emp order by sal desc
10 )
11 where rownum <=3
12 );
13 end lowest_test;
14 /

过程已创建。

SQL> begin lowest_test; end;
2 /

PL/SQL 过程已成功完成。

SQL> select * from emp;

EMPNO SAL
---------- ----------
1 1.5
3 3.85
4 1.87
6 1.98
crazylaa 2010-01-20
  • 打赏
  • 举报
回复
因为table是emp,里面的update写成了emp_test.
忆轩辕 2010-01-20
  • 打赏
  • 举报
回复
补上测试数据



create table emp
(empno number(4),
sal number(7,2))

insert into emp values(1,1.5)
insert into emp values(3,3.5)
insert into emp values(4,1.7)
insert into emp values(6,1.8)

17,382

社区成员

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

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