如何修复 ORA-06575: 包或函数处于无效状态错误

Net*_*eto 5 sql oracle plsql stored-functions

我正在寻找创建一个包,已经有一个工作程序。一步一步地研究一个函数,我遇到了一个

ORA-06575 : 包或函数 PROJECT_LENGTH 处于无效状态

错误。

这样做的目的是最终能够显示我的项目持续了多长时间,从开始日期到结束日期以月为单位。我该如何解决这个问题?

我尝试了各种不同的方法和例子。我已经检查了所有变量是否正确。

CREATE OR REPLACE FUNCTION project_length(startDate IN DATE,
                                          endDate   IN DATE) RETURN NUMBER IS
BEGIN
  RETURN FLOOR(MONTHS_BETWEEN(startDate, endDate) / 12);
END;
/
Run Code Online (Sandbox Code Playgroud)

测试:

SELECT projectname, project_length(startDate,endDate)  
  FROM project 
 WHERE project_length(startDate,endDate) > 0; 
Run Code Online (Sandbox Code Playgroud)

我期待一个输出,其中包含项目名称和项目长度,显示项目花费的月数

Bar*_*han 6

只需使用

ALTER FUNCTION project_length COMPILE;
Run Code Online (Sandbox Code Playgroud)

此问题发生在依赖对象之一上有 DDL 的情况。也许您在这个函数中有一个语句,这里没有透露,引用该表project和最近添加到表中的列project应用于表的 DDL

实际上,这里提供的代码中没有依赖对象。所以这个函数的代码中肯定缺少一些东西。