【问题标题】:I need for price code to be asked only if type := E仅在 type := E 时才需要询问价格代码
【发布时间】:2018-01-07 07:31:14
【问题描述】:

我这里有个小问题,我想要部分代码 lv_price_num := '&lv_price_num';如果 TYPE := 'E' 则启动,但是当我运行代码时,无论类型如何,它都会提示输入价格,其余工作正常。

    DECLARE
      lv_type_txt CHAR(1);
      lv_price_num NUMBER(4,2);
      lv_disc_num NUMBER(3,2);
    BEGIN 
      lv_type_txt := '&lv_type_txt';
      IF lv_type_txt = 'E' THEN
         lv_price_num := '&lv_price_num';
            IF    lv_price_num > 85 THEN
                  lv_disc_num := .20;
            ELSIF lv_price_num > 45 THEN
                  lv_disc_num := .15;
            ELSE  lv_disc_num := .10;
            END IF;
        ELSIF lv_type_txt = 'C' THEN
              lv_disc_num := .05;
        ELSE lv_disc_num := 0;
        END IF;
        DBMS_OUTPUT.PUT_LINE(lv_disc_num);
   END; 

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:

    每当您使用与号调用变量时,相关语句都会将其视为参数。您可以将其称为过程或函数来抑制此类响应:

    SQL> set serveroutput on;
    SQL> CREATE OR REPLACE PROCEDURE MY_PROC( lv_price_num NUMBER, lv_type_txt VARCHAR2 ) IS
          lv_disc_num NUMBER(3,2);
        BEGIN 
          IF lv_type_txt = 'E' THEN
                IF    lv_price_num > 85 THEN
                      lv_disc_num := .20;
                ELSIF lv_price_num > 45 THEN
                      lv_disc_num := .15;
                ELSE  lv_disc_num := .10;
                END IF;
            ELSIF lv_type_txt = 'C' THEN
                  lv_disc_num := .05;
            ELSE lv_disc_num := 0;
            END IF;
            DBMS_OUTPUT.PUT_LINE(lv_disc_num);
       END; 
    

    【讨论】:

      猜你喜欢
      • 2015-01-20
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 2020-09-04
      • 1970-01-01
      • 2011-08-31
      相关资源
      最近更新 更多