ORA-06575: 处于无效状态

Posted

技术标签:

【中文标题】ORA-06575: 处于无效状态【英文标题】:ORA-06575: is in an invalid state 【发布时间】:2016-12-15 13:29:46 【问题描述】:

您好,我正在尝试解决以下问题并不断收到错误消息。创建一个名为 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 处于无效状态

【问题讨论】:

Oracle 10G: ORA-06575: function in invalid state的可能重复 ^ 这个骗子显示了完整的故障排除 【参考方案1】:

请注意您正在尝试从您的函数中返回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;
/

【讨论】:

以上是关于ORA-06575: 处于无效状态的主要内容,如果未能解决你的问题,请参考以下文章

[Oracle JDBC Driver][Oracle]ORA-06575:

Oracle 定义存储过程 不能执行,处于无效状态。

java.lang.IllegalStateException:远程端点处于 [TEXT_PARTIAL_WRITING] 状态,这是被调用方法的无效状态

MongoError:处于无效状态的服务器实例未定义

MongoError:升级猫鼬模块后处于无效状态的服务器实例未定义

Json.NET 中的异常:处于“开​​始”状态的令牌 PropertyName 将导致无效的 JavaScript 对象