繁体   English   中英

MYSQL在if语句中执行存储过程或运行复杂的SET语句

[英]MYSQL execute stored procedure in if statement or run complicated SET statement

我有一个表格,偶尔导入时会在其中切换贷方和借方-因此,我有一些代码来设置变量,然后在匹配时进行交换,但是我无法在IF语句中运行它试图将其放入存储过程中,但也无法在IF语句中运行该存储过程。 你会推荐什么? 参见下面的代码。 谢谢

set @TotalCr = (select max(TotalCredit) from mbs_headers);

If (@TotalCr = (select sum(PDebit) from mbs_details) and @TotalCr =! (select sum(PCredit) from mbs_details)) 

then UPDATE mbs_detailstest SET PCredit=@tmp:=PCredit, PCredit=PDebit, PDebit=@tmp 
else 
end;

要么

set @TotalCr = (select max(TotalCredit) from mbs_headers);

If (@TotalCr = (select sum(PDebit) from mbs_details) and @TotalCr =! (select sum(PCredit) from mbs_details)) 

then exec TestSwapProc 
else 
end;

与仅包含的TestSwapProc

UPDATE mbs_detailstest SET PCredit=@tmp:=PCredit, PCredit=PDebit, PDebit=@tmp

样本数据-表格:详细信息

Name, Credit, Debit
Mike, 100, 20
Mike, 10, 0

表:标题

name, totalcredits, totaldebits
Mike, 20, 110

我需要切换Details表以反映真实值,因为有时它会以错误的方式插入所需的结果:

表:详细信息

Name, Credits, Debits
Mike, 20, 100
Mike, 0, 10

标头表保持不变,因为它总是正确的

您可以执行以下操作:

declare v_total decimal(10,2);
declare v_debit decimal(10,2);
declare v_credit decimal(10,2);

select max(TotalCredit) into v_total
from mbs_headers;

select sum(PDebit), sum(PCredit) into v_debit, v_credit 
from mbs_details;

If (v_total = v_debit and v_total != v_credit) then
  UPDATE mbs_detailstest 
  SET PCredit=v_debit, PDebit=v_credit; 
end if;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM