【问题标题】:MYSQL execute stored procedure in if statement or run complicated SET statementMYSQL 在 if 语句中执行存储过程或运行复杂的 SET 语句
【发布时间】:2018-07-24 09:09:45
【问题描述】:

我有一张表,偶尔导入时贷方和借方会切换 - 所以我有一些代码来设置变量,然后在匹配时进行交换,但是我无法让它在 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

我需要切换详细信息表以反映真实值,因为它有时会以错误的方式插入 期望的结果:

表格:详细信息

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

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

【问题讨论】:

  • 样本数据和期望的结果真的很有帮助。
  • @GordonLinoff 嗨,感谢您的评论,样本和所需的结果已被编辑,下面的答案对我不起作用。谢谢!

标签: mysql sql if-statement stored-procedures sql-update


【解决方案1】:

你可以这样做:

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2015-01-17
    • 2019-06-23
    相关资源
    最近更新 更多