簡體   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