是否可以在if語句中編寫複合語句-mysql?在編寫mysql中的複合語句時需要幫助
這對我來說是返回一個錯誤,如:
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE n INT unsigned DEFAULT 0;
DECLARE i INT unsigned DEFAULT 0;
DECL' at line 40
Sombody請幫助
下面是該查詢我使用
...........................................
IF(tarif='LT')
THEN
CREATE TABLE costSlabs SELECT `Start`,`End`,Cost FROM energy_slabs where SiteId=NEW.SiteID and `Start` < totalUnits;
DECLARE n INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
DECLARE newStart INT;
DECLARE newEnd INT;
DECLARE newCost DOUBLE;
DECLARE finalCost DOUBLE DEFAULT 0;
SELECT COUNT(*) FROM costSlabs INTO n;
SET i=0;
WHILE i<n DO
SELECT `Start`, `End`,Cost INTO newStart,newEnd,newCost FROM costSlabs LIMIT i,1 ;
IF(newEnd<totalUnits)
THEN
SET finalCost = finalCost + ((newEnd-newStart) * newCost);
ELSE
...........................................
感謝您的回答,像這樣嘗試,但現在顯示錯誤 [Err] 1422 - 存儲函數或觸發器中不允許顯式或隱式提交。任何想法 ..? – user1844105
類似於「CREATE TABLE」語句的DDL語句導致隱式提交;這在觸發器的情況下是不允許的。在你的觸發器的設計中還有其他一些重要的問題:循環通過一系列'SELECT ... LIMIT i,1'效率低下,沒有order by子句,因此要返回的行不是確定性的(每次執行該SELECT語句可以每次返回完全相同的行,並且在規範內);整個混亂應該用遊標循環代替。有一個對'totalUnits'的引用,但是這並沒有在任何地方聲明。 – spencer7593
我們不知道這個觸發器應該做什麼,最終結果應該是什麼。無論如何,這個觸發器做錯了。 – spencer7593