将2个函数和2个过程组合到一个包中

时间:2013-06-07 05:22:10

标签: oracle plsql

我目前有2个功能和2个运行正常的程序。为了实现程序应该执行的操作,我执行过程1然后执行过程2,过程2将在执行时引用函数。我现在需要将所有内容组合到一个包中,并运行一个入口模块。每个过程/函数都有自己的变量,所以我不知道在哪里声明所有内容(无论是在intro还是body中)。

为了解释的目的,我已经包含了我迄今为止尝试过的内容(但是没有用)。任何帮助,将不胜感激。

CREATE OR REPLACE package myPackage AS

FUNCTION calculateHoliday (p_day in date);

FUNCTION calculateAvg (p_dayname in varchar2, p_timeinterval in number);

PROCEDURE loopHalfHourValues;

PROCEDURE generateForecast;

END myPackage;


PACKAGE BODY entryModule AS

  ...paste entirety of procedures and functions...

END entryModule;

3 个答案:

答案 0 :(得分:1)

CREATE OR REPLACE PACKAGE "myPackage" AS

FUNCTION calculateHoliday (p_day in date);

FUNCTION calculateAvg (p_dayname in varchar2, p_timeinterval in number);

PROCEDURE loopHalfHourValues;

PROCEDURE generateForecast;

PROCEDURE main;

END myPackage;


CREATE OR REPLACE PACKAGE BODY "myPackage" AS

   -- declare global variables

   FUNCTION calculateHoliday (p_day in date)
    ....
   end calculateHoliday;

   FUNCTION calculateAvg (p_dayname in varchar2, p_timeinterval in number)
   ....
   end calculateAvg;

   PROCEDURE loopHalfHourValues is
   ...
   end loopHalfHourValues;

   PROCEDURE generateForecast is
   ...
   end generateForecast;

   PROCEDURE main is
   ...                   -- entry point call the procedures/functionns
   end main ;


END myPackage;

答案 1 :(得分:1)

功能必须返回一些内容!

/* package specification */
CREATE OR REPLACE PACKAGE myPackage AS

    /* public variables here */
    g_variable_no NUMBER; 
    g_variable_ch VARCHAR2(4000); 

    /* public procedures and functions here */
    FUNCTION  calculateHoliday(p_day IN DATE) RETURN return_type;
    FUNCTION  calculateAvg(p_dayname IN VARCHAR2, p_timeinterval IN NUMBER) RETURN return_type;
    PROCEDURE loopHalfHourValues;
    PROCEDURE generateForecast;

END myPackage;

/* package specification */
CREATE OR REPLACE PACKAGE BODY entryModule AS

    /* private variables here */
    l_variable_no NUMBER; 
    l_variable_ch VARCHAR2(4000); 

    FUNCTION calculateHoliday(p_day IN DATE) RETURN return_type
    AS
        l_return return_type;
    BEGIN
        RETURN return_type;
    END;

    FUNCTION  calculateAvg(p_dayname IN VARCHAR2, p_timeinterval IN NUMBER) RETURN return_type
    AS
        l_return return_type;
    BEGIN
        RETURN return_type;
    END;

    PROCEDURE loopHalfHourValues
    AS
    BEGIN
        NULL;
    END;

    PROCEDURE generateForecast
    AS
    BEGIN
        NULL;
    END;

END entryModule;

答案 2 :(得分:0)

您的包规格和正文是不同的标识符,使用相同的包规范和正文标识符

创建或替换包myPackage AS --- spec

创建或替换包Body MyPackage AS --- body

使entrymodule成为一个单独的包来调用或单独的程序,在这种情况下我不认为它是必需的。