2

我正在尝试在包中调用 Oracle 存储过程,但出现此错误:SQL 错误:ORA-06576:不是有效的函数或过程名称

我正在使用 SQL Developer,这是我正在使用的命令

call WEATHERDATAUPDATES.GetLastRunDate("WeatherData")

这是包/程序

PACKAGE BODY WEATHERDATAUPDATES AS

  PROCEDURE GetLastRunDate(PROCESS IN VARCHAR2, RUNDATE OUT DATE) AS
  BEGIN
    SELECT rundate FROM Marcie.last_rundate
    where process = PROCESS;
  END GetLastRunDate;

END WEATHERDATAUPDATES;

我对 Oracle Packages 很陌生,不确定我缺少什么。我尝试搜索,但找不到有效的答案。有人可以告诉我我错过了什么吗?

谢谢,玛西

4

3 回答 3

3

GetLastRunDate 有 2 个参数(进程和运行日期),但您只在调用中传递 1。

由于您想将第二个参数传递出去,一种选择是使其起作用并返回运行日期。

PACKAGE BODY WEATHERDATAUPDATES AS

  FUNCTION GetLastRunDate(PROCESS IN VARCHAR2)
  RETURN DATE
  AS
     lDate DATE;
  BEGIN
    SELECT rundate
    INTO   lDate
    FROM   Marcie.last_rundate
    where  process = PROCESS;

    RETURN lDate;
  END GetLastRunDate;

END WEATHERDATAUPDATES;
于 2012-08-27T14:21:37.583 回答
3

在您的过程中,您没有将检索到的值放在任何地方,您应该使用INTO

...    
   PROCEDURE GetLastRunDate(PROCESS IN VARCHAR2, RUNDATE OUT DATE) AS
   BEGIN
     SELECT rundate 
     INTO RUNDATE 
     FROM Marcie.last_rundate  
     where process = PROCESS;
   END GetLastRunDate;
...

在调用中传递 out 参数的变量RUNDATE OUT DATE

将调用放在 PL/SQL 块中:

DECLARE
    lastRunDate DATE;
BEGIN
    WEATHERDATAUPDATES.GetLastRunDate("WeatherData",lastRunDate);   
    -- do something with lastRunDate
END;
于 2012-08-27T14:36:18.710 回答
2

您已经显示了包的主体,但没有显示规范 - 检查GetLastRunDate包规范中声明的内容。

于 2012-08-28T03:29:11.620 回答