【问题标题】:create a package with only a specification创建一个只有规范的包
【发布时间】:2015-10-31 16:04:56
【问题描述】:

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

 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;

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    也许您想要一个只有几个常量而不是过程的包?

    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;
    

    【讨论】:

    • @user3508766 - 您需要在包体中实现该功能。你在规范中声明它。
    • 这样的?创建或替换包 TAXRATE_PKG 是函数 state_tax_pf( p_state IN VARCHAR2, pv_tax_nc IN NUMBER, pv_tax_tx IN NUMBER, pv_tax_tn IN NUMBER) BEGIN IF p_state = 'NC' THEN pv_tax_nc := 0.35; ELSIF p_state = 'TX' 那么 Pv_tax_tx := 0.05; ELSIF p_state = 'TN' THEN pv_tax_tn := 0.02;万一;结束 TAXRATE_PKG;
    • @user3508766 - 为什么需要函数的状态参数。我希望该函数采用单个参数,即州,并返回一个数值,即税率。
    • 创建或替换包裹 TAXRATE_PKG 功能 state_tax_pf( p_state IN VARCHAR2, pv_tax_nc OUT NUMBER, pv_tax_tx OUT NUMBER, pv_tax_tn OUT NUMBER) 返回 lv_state; BEGIN IF p_state = 'NC' THEN pv_tax_nc := 0.35; ELSIF p_state = 'TX' 那么 Pv_tax_tx := 0.05; ELSIF p_state = 'TN' THEN pv_tax_tn := 0.02;万一;结束 TAXRATE_PKG;
    • @user3508766 - 如果这是一个带有人为约束的家庭作业,我希望你会使用我最初发布的规范,它只声明了一些包全局变量。
    猜你喜欢
    • 2016-01-30
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 2015-04-08
    • 2022-06-11
    • 1970-01-01
    相关资源
    最近更新 更多