set serveroutput on;
declare
type user_record is record
( v_id emp.empno%type,
v_name emp.ename%type
);
v_user_record user_record;
cursor zzucursor(v_type number)is
select empno,ename from emp
where deptno =v_type;begin
for v_user_record in zzucursor(30) loop
dbms_output.put_line('userid :'||v_user_record.v_id||'username :'||v_user_record.v_name);
end loop ;
end;错误信息如下:第 14 行出现错误:
ORA-06550: 第 14 行, 第 49 列:
PLS-00302: 必须声明 'V_ID' 组件
ORA-06550: 第 14 行, 第 1 列:
PL/SQL: Statement ignored
declare
type user_record is record
( v_id emp.empno%type,
v_name emp.ename%type
);
v_user_record user_record;
cursor zzucursor(v_type number)is
select empno,ename from emp
where deptno =v_type;begin
for v_user_record in zzucursor(30) loop
dbms_output.put_line('userid :'||v_user_record.v_id||'username :'||v_user_record.v_name);
end loop ;
end;错误信息如下:第 14 行出现错误:
ORA-06550: 第 14 行, 第 49 列:
PLS-00302: 必须声明 'V_ID' 组件
ORA-06550: 第 14 行, 第 1 列:
PL/SQL: Statement ignored
type user_record is record
( v_id emp.empno%type,
v_name emp.ename%type
);
v_user_record user_record;
cursor zzucursor is
select empno,ename from emp;
begin
for i in zzucursor loop
v_user_record.v_id := i.empno;
v_user_record.v_name := i.ename;
dbms_output.put_line('userid :'||v_user_record.v_id||'username :'||v_user_record.v_name);
end loop ;
end;
/你没有对v_id赋值,所以产生问题
declare
type user_record is record
( v_id emp.empno%type,
v_name emp.ename%type
);
v_user_record user_record;
cursor zzucursor is
select empno,ename from emp
where deptno =30;
begin
select empno,ename into v_user_record from emp
where deptno =30 and empno=7698;
dbms_output.put_line('aaaaauserid :'||v_user_record.v_id||'username :'||v_user_record.v_name);
for v_user_record in zzucursor loop
select empno,ename into v_user_record from emp
where deptno =30;
dbms_output.put_line('userid :'||v_user_record.empno||'username :'||v_user_record.ename);
end loop ;
dbms_output.put_line('bbbbbbbuserid :'||v_user_record.v_id||'username :'||v_user_record.v_name);
end;
这段代码你跑下就该明白了,循环体内和循环体外的差别。
declare
type user_record is record
( v_id emp.empno%type,
v_name emp.ename%type
);
v_user_record user_record;
cursor zzucursor is
select empno,ename from emp
where deptno =30;
begin
open zzucursor;
loop
fetch zzucursor into v_user_record;
exit when zzucursor%notfound;
dbms_output.put_line('userid :'||v_user_record.v_id||'username :'||v_user_record.v_name);
dbms_output.put_line('aa');
end loop ;
close zzucursor;
end;
用fetch 循环就不会出现这个情况。 给分!
declare
type user_record is record
( v_id emp.empno%type,
v_name emp.ename%type
);
v_user_record user_record;
cursor zzucursor is
select empno,ename from emp
where deptno =30;
begin
select empno,ename into v_user_record from emp
where deptno =30 and empno=7698;
dbms_output.put_line('aaaaauserid :'||v_user_record.v_id||'username :'||v_user_record.v_name);
for v_user_record in zzucursor loop
dbms_output.put_line('userid :'||v_user_record.empno||'username :'||v_user_record.ename);
end loop ;
end;这个 是整理后的。你自己可以从不同角度测测。