Объявить недействительным на этой позиции, ожидая - PullRequest
0 голосов
/ 30 мая 2019

Имеет объявляет, что дает непредвиденные ошибки, которые пытались найти решение. Как и странно, как и предыдущие процедуры, которые используют тот же синтаксис, но не выдают никаких ошибок

Это для процедуры, которая использует курсоры для извлечения информации из таблицы, а затем вставляет ее в другую таблицу, что делается для того, чтобы информация в ней могла использоваться для вычисления общей суммы, которая передается вместе с некоторыми необходимые значения

BEGIN
     DECLARE fin INT DEFAULT FALSE;
     DECLARE pol VARCHAR(30) default '';
     DECLARE total_accrued decimal(20,2) DEFAULT '0.00';
     DECLARE total_paid decimal(20,2) DEFAULT '0';
     DECLARE TOTAL DECIMAL(20,2) DEFAULT '0.00';
     DECLARE user_pol varchar(45) default '';

     DECLARE c3 CURSOr FOR SELECT total_accrued FROM fn_policy_mast;
     DECLARE c4 CURSOR FOr SELECT total_amount_paid FROM fn_policy_mast;
     DECLARE c2 CURSOR FOR SELECt policy_number FROM fn_policy_mast;
     DECLARE c1 CURSOr FOR SELECT balance FROM fn_policy_mast;

    -- DECLARE d_policy CURSOR FOR SELECT DISTINCT cod_policy FROM fn_policy_mast;
     DECLARE CONTINUE HANDLER FOR NOT FOUND SET fin = TRUE;

     OPEN c1;
     OPEN c2;
     OPEN c3;
     OPEN c4;
    -- OPEN d_policy;

     read_loop: LOOP

     FETCH c3 INTO total_accrued;
     FETCH c4 INTO total_paid;
     FETCH c2 INTO pol;
     set total = 0;
    -- FETCH d_policy INTO user_pol;

     -- IF user_pol = pol then
      set total_accrued = (SELECT SUM(monthly_premium) FROM col_trans_log WHERE policy_number LIKE pol);
      set total_paid = (SELECT SUM(transaction_amount) FROM col_Trans_log WHERE policy_number LIKE pol);

      set total =  total_paid - total_accrued;     
     -- END IF;

    -- set TOTAL = (total_accrued-total_paid);
     UPDATE fn_policy_mast set balance = TOTAL WHERE policy_number like pol;


     IF fin=TRUE THEN 
        LEAVE read_loop;
     END IF;


     -- INSERT STATEMENTS HERE
    --  set total = 0;
     END LOOP;  
     select * FROM fn_policy_mast;
     close c1;
     close c2;
     CLOSE c3;
     CLOSE c4;

END//
DELIMITER ;````

Expected result to run, accepting the declares, actual experience is thaere is some form of syntax wrong, as it does not properly recognise the declare statements

This is the error message : Error Code: 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 '' at line 5

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Извините, ребята, я сделал глупую ошибку и забыл включить разделитель перед процедурой, после чего она работает.

Просто включите "Разделитель //" перед процедурой

0 голосов
/ 30 мая 2019
DECLARE total_paid decimal(20,2) DEFAULT '0'

Это линия?Вы пытались изменить значение по умолчанию на «0,00»?

...