Oracle 具有in参数并返回对象类型的函数
如何将数字作为参数传递并在函数中返回对象类型Oracle 具有in参数并返回对象类型的函数,oracle,plsql,Oracle,Plsql,如何将数字作为参数传递并在函数中返回对象类型 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
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
有谁能帮我指出我犯了什么错误以及如何改进这个错误吗?您的函数需要在引用对象之前初始化它
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
语句中