如何在包中调用Oracle过程?

如何在包中调用Oracle过程?,oracle,plsql,packages,Oracle,Plsql,Packages,我试图调用包中的Oracle存储过程,但遇到以下错误: SQL错误:ORA-06576:不是有效的函数或过程名称 我正在使用SQLDeveloper,这是我正在使用的命令 call WEATHERDATAUPDATES.GetLastRunDate("WeatherData") 这是程序包 PACKAGE BODY WEATHERDATAUPDATES AS PROCEDURE GetLastRunDate(PROCESS IN VARCHAR2, RUNDATE OUT DATE) A

我试图调用包中的Oracle存储过程,但遇到以下错误: SQL错误:ORA-06576:不是有效的函数或过程名称

我正在使用SQLDeveloper,这是我正在使用的命令

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软件包相当陌生,不确定我缺少了什么。我试着搜索,但找不到有效的答案。有人能告诉我我错过了什么吗

谢谢,
Marcie

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

因为您希望传递第二个参数,所以一个选项是使其运行并返回rundate

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;

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

...    
   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;

您已经显示了包的主体,但没有显示规范-请检查包规范中是否声明了
GetLastRunDate

我认为这可能也是一个权限问题。谢谢你的意见。我认为这可能也是一个权威问题。谢谢你们的输入。是的,你们是对的,若它只在主体中声明,那个么从外部调用过程可能根本不可能。它仅在包装内提供。