вставить before для триггеров mysql [duplicate]

Я считаю, что наиболее эффективный способ:

$data1 = "the color is";
$data2 = "red";
$result = $data1 . ' ' . $data2;

Если вы хотите реализовать локализацию, вы можете сделать что-то вроде этого:

$translationText = "the color is %s";
$translationRed  = "red";
$result = sprintf($translationText, $translationRed);

Это немного медленнее, но он не предполагает грамматических правил.

4
задан Kelly Larsen 21 November 2012 в 13:12
поделиться

3 ответа

Вы забыли изменить разделитель, поэтому MySQL считает, что ваш первый оператор таков:

CREATE TRIGGER `trg_part_upd` AFTER UPDATE ON `tbl_sub_model_eng_trans_part`
 FOR EACH ROW 
    if NEW.engine_sk = 0 and NEW.trans_sk = 0
    then
        UPDATE tbl_sub_model tsm
        INNER JOIN tbl_fct_sub_eng_trans tfset ON tsm.sub_model_sk = tfset.sub_model_sk
        INNER JOIN tbl_sub_model_eng_trans_part tsmetp ON tfset.trans_sk = tsmetp.trans_sk
        SET tsm.last_modified_date = NOW()
        WHERE tsmetp.sub_model_sk=NEW.sub_model_sk;

Просто добавьте это перед кодом:

DELIMITER $$

... и это впоследствии:

$$

... поэтому MySQL может распознавать полный триггер как один оператор.

Вы можете изменить $$ по своему усмотрению.

Официальные документы содержат подробные сведения об этом в разделе Определение сохраненных программ .

9
ответ дан Álvaro González 22 August 2018 в 15:47
поделиться

Триггер - это исходный объект, у него есть тело - одно или несколько внутренних утверждений.

  • Если в теле есть какие-то утверждения, тогда тело должно быть завернуто BEGIN ... END пункт. В этом случае вам также может понадобиться команда клиента DELIMITER для CREATE TRIGGER.
  • Если у вас есть один оператор в теле, вы можете использовать синтаксис без BEGIN ... END и без команды DELIMITER.
0
ответ дан Devart 22 August 2018 в 15:47
поделиться

Попробуйте это:

DELIMITER $$
CREATE TRIGGER `trg_part_upd` AFTER UPDATE ON `tbl_sub_model_eng_trans_part`
 FOR EACH ROW BEGIN 
    IF NEW.engine_sk = 0 AND NEW.trans_sk = 0
    THEN
        UPDATE tbl_sub_model tsm
        INNER JOIN tbl_fct_sub_eng_trans tfset ON tsm.sub_model_sk = tfset.sub_model_sk
        INNER JOIN tbl_sub_model_eng_trans_part tsmetp ON tfset.trans_sk = tsmetp.trans_sk
        SET tsm.last_modified_date = NOW()
        WHERE tsmetp.sub_model_sk=NEW.sub_model_sk;
    END IF;
  END;
$$

DELIMITER ;
0
ответ дан Saharsh Shah 22 August 2018 в 15:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: