如何在包中调用Oracle过程?
我试图调用包中的Oracle存储过程,但遇到以下错误: SQL错误:ORA-06576:不是有效的函数或过程名称 我正在使用SQLDeveloper,这是我正在使用的命令如何在包中调用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
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软件包相当陌生,不确定我缺少了什么。我试着搜索,但找不到有效的答案。有人能告诉我我错过了什么吗
谢谢,
MarcieGetLastRunDate有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
。我认为这可能也是一个权限问题。谢谢你的意见。我认为这可能也是一个权威问题。谢谢你们的输入。是的,你们是对的,若它只在主体中声明,那个么从外部调用过程可能根本不可能。它仅在包装内提供。