在 PL/SQL 中得到不正确的输出
Getting incorrect output in PL/SQL
我对 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
以上说法有什么逻辑问题?
您忘记在此处将 +
更改为 -
。
只需在此处修复“+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
如果你展示了你所做的一切,那将会有所帮助,因为 - 它对我有用。
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
你失踪了,我会说。不要减去strings,减去numbers。参见第 15 和 16 行。
此外,当在括号表达式前放置减号时,其中的所有符号都会 更改 因此您的 +2
变为 -2
。
我对 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
以上说法有什么逻辑问题?
您忘记在此处将 +
更改为 -
。
只需在此处修复“+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
如果你展示了你所做的一切,那将会有所帮助,因为 - 它对我有用。
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
你失踪了,我会说。不要减去strings,减去numbers。参见第 15 和 16 行。
此外,当在括号表达式前放置减号时,其中的所有符号都会 更改 因此您的 +2
变为 -2
。