2015-09-07 67 views
2

如何傳遞數爲參數,並在功能功能的參數並返回一個對象類型

create type my_details as 
object(v_ename varchar2(20),v_sal number(10)); 


create or replace function f_emp(v_empno in number) 
    return my_details 
as 
    v_det my_details; 
begin 
    select ename,sal 
    into v_det.v_ename,v_det.v_sal 
    from emp 
    where empno=v_empno; 
    return v_det; 
end; 

返回一個對象類型當我嘗試調用函數,我得到一個錯誤

declare 
    v_type my_details; 
begin 
    v_type:=f_emp(7839); 
end; 
/

錯誤堆棧

declare 
* 
ERROR at line 1: 
ORA-06530: Reference to uninitialized composite 
ORA-06512: at "SCOTT.F_EMP", line 6 
ORA-06512: at line 4 

可以在有人幫我指出我犯了什麼錯誤,我該如何改進?

回答

1

你的函數要麼需要引用它

create or replace function f_emp(v_empno in number) 
    return my_details 
as 
    v_det my_details := new my_details(null, null); 
begin 
    select ename,sal 
    into v_det.v_ename,v_det.v_sal 
    from emp 
    where empno=v_empno; 
    return v_det; 

年底前初始化對象;

或者你可以調用構造函數作爲select

create or replace function f_emp(v_empno in number) 
    return my_details 
as 
    v_det my_details; 
begin 
    select my_details(ename,sal) 
    into v_det 
    from emp 
    where empno=v_empno; 
    return v_det; 

末的一部分;

將構造函數置於select語句中將是我通常會建議的方法。

相關問題