2016-07-02 4 views
0

Я создаю хранимую процедуру с условием else в mysql. Процедура работает хорошо с условием if, но она терпит неудачу, если я ставлю условие if. Его даже не показывает синтаксическую ошибку.Сохраненная процедура с условием if не работает

CREATE PROCEDURE inputCars() 
    BEGIN 
     DECLARE n INT DEFAULT 0; 
     DECLARE i INT DEFAULT 0; 
     DECLARE j INT DEFAULT 0; 
     DECLARE d INT DEFAULT 0; 
     SELECT count(*) 
     FROM devtakci.tb_users AS a INNER JOIN devtakci.tb_driver_details AS b ON a.user_id = b.driver_id 
     WHERE a.status = 0 AND a.reg_as = 1 
     INTO n; 
     SET i = 0; 
     SET j = 0; 
     WHILE (i < n) DO 
      IF EXISTS(SELECT driver_id 
         FROM adapter.tb_available_cars 
         WHERE driver_id = (SELECT user_id 
             FROM devtakci.tb_users 
             ORDER BY user_id ASC 
             LIMIT i, 1)) 
      THEN 
       UPDATE adapter.tb_available_cars 
       SET 
        vehicle_type  = (SELECT car_type 
             FROM devtakci.tb_users 
             ORDER BY user_id ASC 
             LIMIT i, 1), 
        driver_phone  = (SELECT phone_no 
             FROM devtakci.tb_users 
             ORDER BY user_id ASC 
             LIMIT i, 1), 
        vehicle_plate  = (SELECT driver_car_no 
             FROM devtakci.tb_users 
             ORDER BY user_id ASC 
             LIMIT i, 1), 
        latitude   = (SELECT current_location_latitude 
             FROM devtakci.tb_users 
             ORDER BY user_id ASC 
             LIMIT i, 1), 
        longitude   = (SELECT current_location_longitude 
             FROM devtakci.tb_users 
             ORDER BY user_id ASC 
             LIMIT i, 1), 
        direction_heading = (SELECT driver_car_direction_angle 
             FROM devtakci.tb_users 
             ORDER BY user_id ASC 
             LIMIT i, 1), 
        status   = (SELECT status 
             FROM devtakci.tb_users 
             ORDER BY user_id ASC 
             LIMIT i, 1), 
        driver_id   = (SELECT user_id 
             FROM devtakci.tb_users 
             ORDER BY user_id ASC 
             LIMIT i, 1) 
       WHERE driver_id = (SELECT user_id 
            FROM devtakci.tb_users 
            ORDER BY user_id ASC 
            LIMIT i, 1) 
      ELSE 
       INSERT INTO adapter.tb_available_cars (vehicle_type, driver_phone, vehicle_plate, latitude, longitude, direction_heading, status, driver_id, make, model, driver_first_name, driver_last_name) 
        SELECT 
         a.car_type, 
         a.phone_no, 
         a.driver_car_no, 
         a.current_location_latitude, 
         a.current_location_longitude, 
         a.driver_car_direction_angle, 
         a.status, 
         b.driver_id, 
         b.vehicle_make, 
         b.vehicle_model, 
         b.first_name, 
         b.last_name 

        FROM devtakci.tb_users AS a 
         INNER JOIN devtakci.tb_driver_details AS b ON a.user_id = b.driver_id 
        WHERE a.status = 0 AND a.reg_as = 1 

        ORDER BY a.user_id ASC 
        LIMIT i, 1; 
      END IF; 
      SET i = i + 1; 
     END WHILE; 
    END; 

Если я выполнить это пропуск, если условие это работает, но не когда я ставлю IF ELSE пункт

ответ

0

В MySQL вы можете использовать только exists в запросе, а не в самом compund заявлении. Вам нужно выбрать driver_id в переменную, а if может сделать decidion на основе значения переменной.

Но заявление о целом if представляется сложной формой insert ... on duplicate key update ... statemen5.

+0

Его работы в версии 5.6, но не в версии 5.1 mysql. Можете ли вы сделать это, чтобы написать его обратно? – Sankalp

+0

Можете ли вы переписать его с помощью подготовленного заявления? – Sankalp

Смежные вопросы