set serveroutput on
declare
type refcursor is ref cursor;
cursor dept_cursor(no number) is
select a.dname,cursor(select ename,sal from emp
where deptno=a.deptno)
from dept a where a.deptno=no;
empcur refcursor;
v_dname dept.dname%type;
v_ename emp.ename%type;
v_sal emp.sal%type;
no number:=&no;
begin
open dept_cursor(no);
loop
fetch dept_cursor into v_dname,empcur;
exit when dept_cursor%notfound;
dbms_output.put_line('部门名:'||v_dname);
loop
fetch empcur into v_ename ,v_sal;
exit when empcur%notfound;
dbms_output.put_line('雇员名:'||v_ename||',工资:'||v_sal);
end loop;
end loop;
close dept_cursor;
end;
/
问题:为什么不等我输入就直接往下执行了,错误如下
输入 no 的值:
原值 11: no number:=&no;
新值 11: no number:= ;
no number:= ;
*
第 11 行出现错误:
ORA-06550: 第 11 行, 第 19 列:
PLS-00103: 出现符号 ";"在需要下列之一时:
declare
type refcursor is ref cursor;
cursor dept_cursor(no number) is
select a.dname,cursor(select ename,sal from emp
where deptno=a.deptno)
from dept a where a.deptno=no;
empcur refcursor;
v_dname dept.dname%type;
v_ename emp.ename%type;
v_sal emp.sal%type;
no number:=&no;
begin
open dept_cursor(no);
loop
fetch dept_cursor into v_dname,empcur;
exit when dept_cursor%notfound;
dbms_output.put_line('部门名:'||v_dname);
loop
fetch empcur into v_ename ,v_sal;
exit when empcur%notfound;
dbms_output.put_line('雇员名:'||v_ename||',工资:'||v_sal);
end loop;
end loop;
close dept_cursor;
end;
/
问题:为什么不等我输入就直接往下执行了,错误如下
输入 no 的值:
原值 11: no number:=&no;
新值 11: no number:= ;
no number:= ;
*
第 11 行出现错误:
ORA-06550: 第 11 行, 第 19 列:
PLS-00103: 出现符号 ";"在需要下列之一时:
SQL> DECLARE
2 TYPE refcursor IS REF CURSOR;
3 CURSOR dept_cursor(no NUMBER) IS
4 SELECT a.dname, CURSOR (SELECT ename, sal FROM emp WHERE deptno = a.deptno)
5 FROM dept a
6 WHERE a.deptno = no;
7 empcur refcursor;
8 v_dname dept.dname%TYPE;
9 v_ename emp.ename%TYPE;
10 v_sal emp.sal%TYPE;
11 no number := &no;
12 BEGIN
13 OPEN dept_cursor(no);
14 LOOP
15 FETCH dept_cursor
16 INTO v_dname, empcur;
17 EXIT WHEN dept_cursor%NOTFOUND;
18 dbms_output.put_line('部门名:' || v_dname);
19 LOOP
20 FETCH empcur
21 INTO v_ename, v_sal;
22 EXIT WHEN empcur%NOTFOUND;
23 dbms_output.put_line('雇员名:' || v_ename || ',工资:' || v_sal);
24 END LOOP;
25 END LOOP;
26 CLOSE dept_cursor;
27 END;
28 /
输入 no 的值: 30
原值 11: no number := &no;
新值 11: no number := 30;
部门名:SALES
雇员名:ALLEN,工资:1600
雇员名:WARD,工资:1250
雇员名:MARTIN,工资:1250
雇员名:BLAKE,工资:2850
雇员名:TURNER,工资:1500
雇员名:JAMES,工资:950PL/SQL 过程已成功完成。SQL>
no number:= ;
這個解析器當然報錯了。