具有in参数并返回对象类型的函数

时间:2015-09-07 04:33:49

标签: 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_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 个答案:

答案 0 :(得分:1)

您的函数要么在引用之前初始化对象

import akka.http.scaladsl.model.HttpEntity
import akka.http.scaladsl.model.MediaTypes.`application/json`

get {
  parameters("firstName".?, "lastName".?).as(Name) { name =>
    findUserByName(name) match {
      case Left(users) => complete(users)
      case Right(error) => complete(error._1, HttpEntity(`application/json`, error._2))
    }
  }
}

端;

或者您可以将构造函数作为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; 语句中将是我通常建议的方法。