2016-07-02 18 views
0

mysqlのif else条件でストアドプロシージャを作成しています。プロシージャは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; 

私はそれが動作条件ならば飛ばし、それを実行するが、私はあなただけではないcompundステートメント自体では、クエリでexistsを使用することができますMySQLでのIF ELSE句

答えて

0

を入れたときに失敗した場合。 driver_idを変数にフェッチする必要があり、ifは変数の値に基づいてデシジョンを作成できます。

しかし、if文全体はinsert ... on duplicate key update ... statemen5の複雑な形式のようです。

+0

5.6バージョンでは動作しますが、5.1バージョンのmysqlでは失敗します。あなたはそれを書き返すことを好むことができます – Sankalp

+0

準備文を使って書き直せますか? – Sankalp