-1

Мне нужно создать триггер для таблицы с именем try .., который будет выполняться после того, как что-то введено в таблицу ..(Я использую phpmyadmin mysql) Но я получаю ошибку #1064 при его создании .. Мой триггер содержит

BEGIN
DECLARE aa decimal(4,3);
DECLARE bb decimal(4,3);
DECLARE cc decimal(4,3);
DECLARE cur1 CURSOR FOR SELECT a,b,c FROM site;
OPEN cur1
FETCH NEXT FROM cur1 into aa,bb,cc;
WHILE FETCH_STATUS=0
BEGIN
PRINT aa
END
END

это показывает ошибку как это

 MySQL said: #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 'FETCH NEXT FROM cur1 
into aa,bb,cc; WHILE FETCH_STATUS=0 BEGIN PRINT aa END ' at line 7

Я новичок, чтобы вызвать ..Помоги мне... Спасибо

1 ответ1

0

Непоследовательное использование точки с запятой для разделения ваших команд будет (по крайней мере, частью) вашей проблемой. Вам нужен один в конце каждой команды. :)

Open cur1 - это отдельная команда, которая должна иметь ; после него (как и ваше заявление "Печать").

Поскольку это не так, MySQL будет интерпретировать две строки как одну команду: OPEN cur1 FETCH NEXT FROM cur1 into aa,bb,cc; которая является недопустимой командой

Изменить после комментария:

Как говорится в сообщении об ошибке, у вас есть синтаксические ошибки. Это (все еще) из-за неправильного использования точки с запятой, но у вас также есть ошибки в вашем использовании оператора While. Цикл While должен иметь do и заканчиваться End While (не требуется никакой дополнительный Begin/End блока).

Ознакомьтесь с справкой MySQL: 13.6.5.8 Синтаксис WHILE.

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

BEGIN
    DECLARE aa decimal(4,3);
    DECLARE bb decimal(4,3);
    DECLARE cc decimal(4,3);
    DECLARE cur1 CURSOR FOR SELECT a,b,c FROM site;
    OPEN cur1;
    FETCH NEXT FROM cur1 into aa,bb,cc;
    WHILE FETCH_STATUS=0 DO
        PRINT aa;
    END WHILE;
END;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .