本帖最后由 wodeguozili 于 2009-10-21 22:40:15 编辑

解决方案 »

  1.   

    declare
    type t_emp is record(
    v_empno emp.empno%type,  --emp表是以scott用户登录时自带的表
    v_ename emp.ename%type,
    v_job  emp.job%type);type t_emp1 is record(
    v_empno emp.empno%type,
    v_ename emp.ename%type,
    v_job  emp.job%type);v_emp t_emp;
    v_emp1 t_emp1;
    begin
    select empno,ename,job
    into  v_emp
    from emp
    where empno = 7566;
    v_emp1.v_empno := v_emp.v_empno;  
    v_emp1.v_ename := v_emp.v_ename;  
    v_emp1.v_job := v_emp.v_job;  
    dbms_output.put_line(v_emp1.v_job);
    end; 
      

  2.   

    v_emp t_emp;
    v_emp1 t_emp1; v_emp和v_emp1是不同类型的两个变量,虽然两个类型t_emp和t_emp1的定义是相同的。Oracle能对自带的变量类型进行隐式转换,比如integer和varchar2。但对用户自定义的复杂类型,隐式转换是不可能的。
      

  3.   

    自定义类型v_emp,无法直接进行赋值
    v_emp1 := v_emp; 
      

  4.   

    看了下v_emp1没用上啊,要输出的话,直接以v_emp输出就可以了,为什么要再转到v_emp1 ???
      

  5.   

    t_emp和t_emp1是两个不同的类型,不能直接赋值。将v_emp1也定义为t_emp类型是可以的:declare 
    type t_emp is record( 
    v_empno emp.empno%type,  --emp表是以scott用户登录时自带的表 
    v_ename emp.ename%type, 
    v_job  emp.job%type); type t_emp1 is record( 
    v_empno emp.empno%type, 
    v_ename emp.ename%type, 
    v_job  emp.job%type); v_emp t_emp; 
    v_emp1 t_emp;
    begin 
    select empno,ename,job 
    into  v_emp 
    from emp 
    where empno = 7566; 
    v_emp1 := v_emp;  --不知道为什么不可以  这里就是第20行 
    dbms_output.put_line(v_emp1.v_job); 
    end; 
      

  6.   

    v_emp1 := v_emp改成下面这样试试
    v_emp1.v_empno:=v_emp.v_empno
    v_emp1.v_ename:=v_emp.v_ename
    v_emp1.v_job:=v_emp.v_empno