Невозможно изменить таблицу внутри случая, когда в хранимой процедуре - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь выполнить довольно простую хранимую процедуру на 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 ;

1 Ответ

0 голосов
/ 03 января 2019

Попробуйте:

DELIMITER //

-- DROP PROCEDURE IF EXISTS finance.spProcessIndex;
DROP PROCEDURE IF EXISTS finance.spProcessIndex//
.
.
.
CASE
  WHEN actDesc='CREATE' THEN
.
.
.
  CASE
    WHEN tblName='tbl_transactions' THEN
  .
  .
  .
  END CASE;
END CASE;
.
.
.

DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...