ORA-06575:处于无效状态

时间:2016-12-15 13:29:46

标签: oracle function plsql

您好我正在尝试执行以下问题并继续收到错误。创建一个名为DOLLARS_BY_VEHICLE_TYPE的用户定义函数,该函数接收连接的品牌和型号的输入参数,然后查询VEHICLES和SALES_FACTS表以返回该组合的销售总销售额。我的代码如下:

CREATE OR REPLACE FUNCTION DOLLARS_BY_VEHICLE_TYPE (V_AUTODESC VARCHAR2)
RETURN VARCHAR2
IS
V_AMT   VARCHAR2 (50);
BEGIN
SELECT NVL (SUM (GROSS_SALES_AMOUNT), 0)
INTO V_AMT
FROM VEHICLES v, SALES_FACTS s
WHERE V.Vehicle_Code = S.Vehicle_Code AND V.DESCRIPTION= V_AUTODESC;

RETURN V_AMT;
EXCEPTION
WHEN OTHERS
THEN
RETURN 0;
END;
/

但是,当我运行它时,我得到:

警告:使用编译错误创建的函数。 第1行的错误: ORA-06575:包或函数DOLLARS_BY_VEHICLE_TYPE处于无效状态

1 个答案:

答案 0 :(得分:2)

请注意,您尝试从函数返回sum,而且只能number/int/float。因此,您的函数的返回类型应为number而不是varchar2。另请注意,您使用的是已弃用的sql语法,可以更改。见下文:

CREATE OR REPLACE FUNCTION DOLLARS_BY_VEHICLE_TYPE (V_AUTODESC VARCHAR2)
  -- RETURN VARCHAR2
  RETURN NUMBER
IS
   --V_AMT   VARCHAR2 (50);
     V_AMT  NUMBER;
BEGIN
   SELECT NVL (SUM (GROSS_SALES_AMOUNT), 0)
     INTO V_AMT
     FROM VEHICLES v 
     inner join SALES_FACTS s
     ON V.Vehicle_Code = S.Vehicle_Code 
     where V.DESCRIPTION = V_AUTODESC;

   RETURN V_AMT;
EXCEPTION
   WHEN OTHERS
   THEN
      RETURN 0;
END;
/