Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 具有in参数并返回对象类型的函数_Oracle_Plsql - Fatal编程技术网

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
语句中