当前位置: 代码迷 >> Oracle管理 >> oacle 的for循环, 运行时有个异常 求解!跪求
  详细解决方案

oacle 的for循环, 运行时有个异常 求解!跪求

热度:55   发布时间:2016-04-24 05:19:52.0
oacle 的for循环, 运行时有个错误 求解!跪求
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 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赋值,所以产生问题
------解决方案--------------------
对于for 循环而言 for后面的那个变量的作用域只仅限于for这个循环体内, 你之前声明的record的类型在for循环体内并没有被读到,而且是被你再for后面声明的变量给覆盖掉了,不管名字是否一样。
SQL code
declaretype user_record is record( v_id emp.empno%type,  v_name emp.ename%type);v_user_record user_record; cursor zzucursor isselect 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 loopselect 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;