今天上课的时候看到了一个这样的问题:、
利用游标显示工资最搞的前三名雇员的名称和工资。我们这一节讲的是游标这个概念,在书中的实例的解答方法如下:
set serveroutput on
declare
v_ename varchar2(10);
v_sal number(5);
cursor emp_cursor is select ename, job from emp order by sal desc;
begin
open emp_cursor;
for I in 1..3 loop
FETCH emp_cursor into v_ename,v_sal;
dbms_output.put_line(v_ename||','||v_sal);
end loop;
close emp_cursor;
end;
我自己联系了好几遍,可是老是出现:
第一行出现错误:
ORA-00922 选项缺失活无效,这是怎么回事?请大侠帮忙解决!谢谢!
利用游标显示工资最搞的前三名雇员的名称和工资。我们这一节讲的是游标这个概念,在书中的实例的解答方法如下:
set serveroutput on
declare
v_ename varchar2(10);
v_sal number(5);
cursor emp_cursor is select ename, job from emp order by sal desc;
begin
open emp_cursor;
for I in 1..3 loop
FETCH emp_cursor into v_ename,v_sal;
dbms_output.put_line(v_ename||','||v_sal);
end loop;
close emp_cursor;
end;
我自己联系了好几遍,可是老是出现:
第一行出现错误:
ORA-00922 选项缺失活无效,这是怎么回事?请大侠帮忙解决!谢谢!
解决方案 »
- 请教关于创建视图的问题
- 如何将原有oracle数据库导入到unix系统中的数据库中?
- [Oracle 11g]Win 7 安装时 使用DBCA创建配置数据库时报错
- RHEL AS 4下安装9204不能启动OEM
- 正常操作数据库N次后,现在 要恢复到其中的第J(j<N)次时的数据状态。问:用事务回滚可以实现么
- 一个oracle的存储过程,如何调用成功?
- oracle9i一套多少钱
- oracle817用managerment server进行数据库备份的问题?
- 有問題, create 不了table (在線等)???
- Miscellance Session
- oracle里的函数和存储过程一般是哪里调用?
- oracle 终于装好了,不过Enterprise Manager不能用
declare
v_ename varchar2(10);
v_sal number(5);
cursor emp_cursor is select ename, sal from emp order by sal desc;
begin
open emp_cursor;
for I in 1..3 loop
FETCH emp_cursor into v_ename,v_sal;
dbms_output.put_line(v_ename||','||v_sal);
end loop;
close emp_cursor;
end;
2. set serveroutput on 这个指令要在 SQLPLUS 中执行,如果你是使用 PL/SQL 工具,新建了一个 SQL Windows 这要把这个命令去掉, 或者新建一个 Commond Windows 执行.
-------------------- ----------
zhongguo 20SQL> set serveroutput on;
SQL> declare
2 v_ename varchar2(10);
3 v_sal number(5);
4 cursor emp_cursor is select ename, sal from emp order by sal desc;
5 begin
6 open emp_cursor;
7 for I in 1..3 loop
8 FETCH emp_cursor into v_ename,v_sal;
9 dbms_output.put_line(v_ename||','||v_sal);
10 end loop;
11 close emp_cursor;
12 end;
13 /
zhongguo,20
zhongguo,20
zhongguo,20PL/SQL 过程已成功完成。SQL>
declare
v_ename varchar2(10);
v_sal number(5);
cursor emp_cursor is select ename, job from emp order by sal desc;
begin
open emp_cursor;
for I in 1..3 loop
FETCH emp_cursor into v_ename,v_sal;
dbms_output.put_line(v_ename||','||v_sal);
end loop;
close emp_cursor;
end;
文中带红色的两个字体表示的对象的数据类型不一样吧!
SQL> declare
2 v_ename varchar2(10);
3 v_sal number(5);
4 cursor emp_cursor is select ename, job from emp order by sal desc;
5 begin
6 open emp_cursor;
7 for I in 1..3 loop
8 FETCH emp_cursor into v_ename,v_sal;
9 dbms_output.put_line(v_ename||','||v_sal);
10 end loop;
11 close emp_cursor;
12 end;
13 /
declare
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 8--正确写法如下
SQL> set serveroutput on
SQL> declare
2 v_ename varchar2(10);
3 v_sal number(5);
4 cursor emp_cursor is select ename, sal from emp order by sal desc;
5 begin
6 open emp_cursor;
7 for I in 1..3 loop
8 FETCH emp_cursor into v_ename,v_sal;
9 dbms_output.put_line(v_ename||','||v_sal);
10 end loop;
11 close emp_cursor;
12 end;
13 /
KING,5000
FORD,3000
SCOTT,3000PL/SQL procedure successfully completed.
你的错误信息我上网差下了 内容如下
ORA-00922: missing or invalid option
Cause: An invalid option was specified in defining a column or storage clause. The valid option in specifying a column is NOT NULL to specify that the column cannot contain any NULL values. Only constraints may follow the datatype. Specifying a maximum length on a DATE or LONG datatype also causes this error.
Action: Correct the syntax. Remove the erroneous option or length specification from the column or storage specification.
SQL>
SQL> /
KING,5000
FORD,3000
SCOTT,3000
on 此时就把详细的数据显示出来了,我不知道它的原理是什么那位大侠可以解答下我的疑问?
打开sqlplus的 DBMS_OUTPUT.PUT_LINE的输出。
你那里去掉就可以,是因为你没把这句最后加分号,它跟declare连起来了
你加个分号。命令行下,这句随便什么时候都可以用来打开的。
SQL> declare
2 v_ename varchar2(10);
3 v_sal number(5);
4 cursor emp_cursor is select ename, sal from emp order by sal desc;
5 begin
6 open emp_cursor;
7 for I in 1..3 loop
8 FETCH emp_cursor into v_ename,v_sal;
9 dbms_output.put_line(v_ename||','||v_sal);
10 end loop;
11 close emp_cursor;
12 end;