创建一个只有规范的包

时间:2015-10-30 20:27:26

标签: sql oracle oracle11g

下面列出的代码会创建一个只包含规范并保持税率的软件包。我需要能够在匿名块中显示这些速率以显示每个打包变量的值。这可能是某种方式,还是我需要在我的规范中加入更多逻辑?任何帮助将不胜感激。

 CREATE OR REPLACE PACKAGE 
 TAXRATE_PKG IS

 PROCEDURE state_tax_pf(
            p_state IN VARCHAR2,
            pv_tax_nc IN NUMBER := 0.35, 
            pv_tax_tx IN NUMBER := 0.05, 
            pv_tax_tn IN NUMBER := 0.02) ;

END TAXRATE_PKG;

1 个答案:

答案 0 :(得分:2)

也许你想要一个只有一些常量而不是程序的包?

CREATE OR REPLACE PACKAGE 
 TAXRATE_PKG 
IS

 g_tax_rate_nc constant NUMBER := 0.35;
 g_tax_rate_tx constant number := 0.05;
 g_tax_rate_tn constant number := 0.02;

END TAXRATE_PKG;

然而,想要为不同的州税率设定常数似乎有点奇怪。您似乎更有可能希望将其存储在表中并创建一个接受状态并返回存储在该表中的速率的函数。

CREATE TABLE state_tax_rate (
  state_code varchar2(2) primary key,
  tax_rate   number(3,2)
);

insert into state_tax_rate( state_code, tax_rate )
  values( 'NC', 0.35 );
insert into state_tax_rate( state_code, tax_rate )
  values( 'TX', 0.05 );
insert into state_tax_rate( state_code, tax_rate )
  values( 'TN', 0.02 );

CREATE OR REPLACE PACKAGE taxrate_pkg
IS
  FUNCTION get_rate( p_state IN state_tax_rate.state_code%type )
    RETURN state_tax_rate.tax_rate%type;
END taxrate_pkg;

CREATE OR REPLACE PACKAGE BODY taxrate_pkg
AS
  FUNCTION get_rate( p_state IN state_tax_rate.state_code%type )
    RETURN state_tax_rate.tax_rate%type
  IS
    l_tax_rate state_tax_rate.tax_rate%type;
  BEGIN
    SELECT tax_rate
      INTO l_tax_rate
      FROM state_tax_rate
     WHERE state_code = p_state;

    RETURN l_tax_rate;
  END get_rate;
END taxrate_pkg;