PL/SQL:函数返回无值

Posted

技术标签:

【中文标题】PL/SQL:函数返回无值【英文标题】:PL/SQL: Function returned without value 【发布时间】:2019-12-06 01:04:33 【问题描述】:

我在下面写了函数来检查给定的数据是否存在。

CREATE OR REPLACE FUNCTION PSPIWEB_USER.AB_GetAuditTypeID (in_DeptID NUMBER)
   RETURN NUMBER
IS
   intAuditTypeID   NUMBER;
BEGIN

   SELECT audittypeid
     INTO intAuditTypeID
     FROM iqa_department
    WHERE seqno = in_deptid;

   RETURN intAuditTypeID;
EXCEPTION
   WHEN NO_DATA_FOUND
   THEN
      NULL;
   WHEN OTHERS
   THEN
      RAISE;
END;
/

它以前可以工作,但是当我在名为 iqa_department 的表上添加新数据时,它在触发函数后突然返回该错误,我在 oracle fom mysql to oracle 中有点新

我是这样称呼它的。

Select IQA_CAR.CAR_NO,IQA_CAR.REFNO,NVL(null,' '),NVL(IQA_CAR.BFGSECTION ,' ') ,IQA_CAR.ERR_PROOF,NVL(IQA_SECTION.SECTIONNAME,' '),NVL (To_char(iqa_car.auditdate,'YYYY-MM-DD'), ' '),NVL(IQA_CAR.ISSUEDTO,' '),NVL(TQM_VWEMPLOYEE.NAME,' '), NVL (To_Char(iqa_car.issueddate,'YYYY-MM-DD'), ' '),NVL (To_Char(iqa_car.closeddate,'YYYY-MM-DD'), 'N'),NVL(VW_CURR_APPROVER.current_approver,' ') from IQA_CAR 
                   left outer join IQA_SECTION 
                    on IQA_SECTION.SECTIONID = IQA_CAR.AREAID 
                    left outer join TQM_VWEMPLOYEE 
                    on TQM_VWEMPLOYEE.EMP_NUMBER = IQA_CAR.ISSUEDTO 
                    full outer join VW_CURR_APPROVER 
                    on VW_CURR_APPROVER.car_no = IQA_CAR.CAR_NO 
                    where ab_getaudittypeid(deptid) = 11

我遇到的错误

ORA-06503: PL/SQL: Function returned without value
ORA-06512: at "PSPIWEB_USER.AB_GETAUDITTYPEID", line 19

【问题讨论】:

你遇到了什么错误? 对不起,我更新了我的问题 为什么要用一个函数来完成可以通过连接或子查询完成的事情?函数的性能可能更差。 该功能已经创建并在项目交给我时在程序上使用 你能帮我把它做成子查询吗 【参考方案1】:

试试这个:

CREATE OR REPLACE FUNCTION PSPIWEB_USER.AB_GetAuditTypeID (in_DeptID NUMBER)
   RETURN NUMBER
IS
   intAuditTypeID   NUMBER;
BEGIN

   SELECT audittypeid
     INTO intAuditTypeID
     FROM iqa_department
    WHERE seqno = in_deptid;

   RETURN intAuditTypeID;
EXCEPTION
   WHEN NO_DATA_FOUND
   THEN
      RETURN NULL;
   WHEN OTHERS
   THEN
      RAISE;
END;

【讨论】:

以上是关于PL/SQL:函数返回无值的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 函数返回错误结果

具有布尔返回值的 pl/sql 函数的 OracleType?

PL/sql 函数返回多行错误

忽略 PL/SQL 函数的返回值

带有参数的 PL/SQL 过程/函数从选择查询返回表

从 PL/SQL 函数返回多个值