Я пытаюсь выполнить довольно простую хранимую процедуру на MySQL, но она продолжает выдавать ошибки.
Существуют дополнительные условия WHEN
, но я удалил их здесь, чтобы упростить их, иэта более простая версия тоже не работает.Я получаю SQL Error 1064 in Statement #2: You have an error in your SQL Syntax... near ELSE CALL finance.sprProce...
.
С finance.spProcessTrans_AddToLogs
все в порядке, я использую точный синтаксис в ряде других SP.Код, который обрабатывается между WHEN
s, хорош, поскольку я тестировал его отдельно.
Версия: Windows / MySQL 8.0.12 Community
Куда я иду не так?Должен ли я быть в состоянии сделать это ALTER TABLE в случае, когда?
DELIMITER //
DROP PROCEDURE IF EXISTS finance.spProcessIndex;
CREATE PROCEDURE finance.spProcessIndex(
IN tblName VARCHAR(50),
IN actDesc VARCHAR(50)
)
BEGIN
SET tblName = IFNULL(tblName, 'ERROR');
SET actDesc = IFNULL(actDesc, 'ERROR');
CASE
WHEN actDesc='CREATE' THEN
CASE
WHEN tblName='tbl_transactions' THEN
ALTER TABLE tbl_transactions
MODIFY TransactionID INT AUTO_INCREMENT PRIMARY KEY,
ADD INDEX IDX_ProcessTrans_A (CustomerRef, TransMonth, Product, TransValue, RowReference, TransactionID,ProdInCust_Mnth_Same_SameProd_LowerVal),
ADD INDEX IDX_tbl_transactions_product (Product(25)),
ADD INDEX IDX_tbl_transactions_prodval (Product, TransValue);
ELSE
ALTER TABLE tbl_transactions_tmp_worker_aa
MODIFY TransactionID INT AUTO_INCREMENT PRIMARY KEY,
ADD INDEX IDX_ProcessTrans_A (CustomerRef, TransMonth, Product, TransValue, RowReference, TransactionID,ProdInCust_Mnth_Same_SameProd_LowerVal),
ADD INDEX IDX_tbl_transactions_product (Product(25)),
ADD INDEX IDX_tbl_transactions_prodval (Product, TransValue);
END;
ELSE
CALL finance.spProcessTrans_AddToLogs('spProcessIndex','BREAKPOINT','ERROR: Bad ACTION',CONCAT('A bad ACTION was specified {',actDesc,'}'));
END;
END//
DELIMITER ;