【问题标题】:Getting incorrect output in PL/SQL在 PL/SQL 中得到不正确的输出
【发布时间】:2020-09-20 17:41:40
【问题描述】:

我对 PL/SQL 中的错误感到惊讶

FCBD(i)='DEUT TRA USD RM TRAD UK, GB02DEUT40508124381319 (USD)',

dbms_output.put_line(INSTR(FCBD(i),' ',INSTR(FCBD(i),',',1,1),2));  output //48
dbms_output.put_line(INSTR(FCBD(i),',',1,1)+2);  output //26

现在我试图从第一个中减去第二个,所以输出应该是 48-26=22 但它是 26。它为每个字符串提供额外的 4,

dbms_output.put_line(INSTR(FCBD(i),' ',INSTR(FCBD(i),',',1,1),2)-INSTR(FCBD(i),',',1,1)+2);

输出 26

上述说法有什么逻辑问题?

【问题讨论】:

    标签: sql oracle plsql oracle11g


    【解决方案1】:

    如果你展示你所做的一切会有所帮助,因为 - 它对我有用。

    SQL> set serveroutput on;
    SQL> declare
      2    fcbd varchar2(100) := 'DEUT TRA USD RM TRAD UK, GB02DEUT40508124381319 (USD)';
      3    a varchar2(10);
      4    b varchar2(10);
      5    c number;
      6  begin
      7    a := INSTR(FCBD,' ',INSTR(FCBD,',',1,1),2);
      8    b := INSTR(FCBD,',',1,1)+2;
      9
     10    c := to_number(a) - to_number(b);
     11
     12    dbms_output.put_line('a = ' || a ||', b = ' || b);
     13    dbms_output.put_line('c = a - b = ' || c);
     14
     15    dbms_output.put_line(to_number(INSTR(FCBD,' ',INSTR(FCBD,',',1,1),2))-
     16                         to_number(INSTR(FCBD,',',1,1)+2));
     17  end;
     18  /
    a = 48, b = 26
    c = a - b = 22
    22
    
    PL/SQL procedure successfully completed.
    
    SQL>
    

    我会说,你失踪的是TO_NUMBER。不要减去字符串,减去数字。请参见第 15 和 16 行。

    此外,当在括号表达式前放置减号时,其中的所有符号都更改,因此您的 +2 变为 -2

    【讨论】:

      【解决方案2】:

      您忘记在此处将+ 更改为-

      只需在此处修复“+2” dbms_output.put_line(INSTR(FCBD(i),' ',INSTR(FCBD(i),',',1,1),2)-INSTR(FCBD(i),',',1,1)+2); dbms_output.put_line(INSTR(FCBD(i),' ',INSTR(FCBD(i),',',1,1),2)-INSTR(FCBD(i),',',1,1)-2);

      最后一个应该是-2。

      a - (b+c) 应该是 a - b - c,而不是 a - b +c

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-30
        • 1970-01-01
        • 2017-01-03
        • 2021-03-05
        • 1970-01-01
        • 2018-03-10
        • 1970-01-01
        相关资源
        最近更新 更多