skip to Main Content

Here’s shortened script of my stored procedure:

DROP PROCEDURE IF EXISTS `GetVehicleDetails`;
DELIMITER //
CREATE PROCEDURE `GetVehicleDetails`(
    IN `inRefNo` VARCHAR(30) COLLATE utf8mb4_general_ci,
    IN `inSurveyType` VARCHAR(20) COLLATE utf8mb4_general_ci
)
BEGIN
DECLARE vehicleTypeID VARCHAR(2);
SET FOREIGN_KEY_CHECKS = OFF;
SELECT * FROM vehicle_details V
    LEFT JOIN vehicle_types VT ON VT.TypeID = V.VehicleType
    LEFT JOIN vehicle_makes VM ON VM.TypeID = V.VehicleType AND VM.MakeID = V.VehicleMake
    LEFT JOIN vehicle_models VD 
        ON VD.TypeID = V.VehicleType AND VD.MakeID = V.VehicleMake AND VD.ModelID = V.VehicleModel
    LEFT JOIN vehicle_variants VV
        ON VV.TypeID = V.VehicleType
        AND VV.MakeID = V.VehicleMake
        AND VV.ModelID = V.VehicleModel
        AND VV.VariantID = V.VehicleVariant
    LEFT JOIN vehicle_body_types VB ON VB.BodyTypeID = V.TypeOfBody
    LEFT JOIN vehicle_info_preinspection VP ON VP.RefNo = inRefNo
    LEFT JOIN fuel_types F ON F.FuelTypeID = VP.Fuel
WHERE V.RefNo = inRefNo;

# Fetch Vehicle Type 
SELECT VehicleType INTO vehicleTypeID FROM vehicle_details WHERE RefNo = inRefNo;
# Get details of body parts
IF vehicleTypeID = 1 THEN /* Personal Car */
    SELECT * FROM body_parts_personal_car WHERE RefNo = inRefNo;
    /*IF inSurveyType = 'preinspection' THEN
        SELECT * FROM accessories_personal_car WHERE RefNo = inRefNo;
    END IF;*/
ELSEIF vehicleTypeID = 4 THEN /* 2 Wheeler */
    SELECT * FROM body_parts_2_wheeler WHERE RefNo = inRefNo;
ELSE
    SELECT * FROM body_parts_commercial_vehicle WHERE RefNo = inRefNo;
END IF;
SET FOREIGN_KEY_CHECKS = ON;
END//
DELIMITER ;

Now, while executing the stored procedure with this statement:

CALL GetVehicleDetails('some ref no', 'interim-survey');

an error is being thrown:

Static analysis:
1 errors were found during analysis.
Missing expression. (near “ON” at position 25)
SQL query: Edit Edit
SET FOREIGN_KEY_CHECKS = ON;
MySQL said: Documentation
2014 – Commands out of sync; you can’t run this command now

I have noticed that the stored procedure is throwing on second SELECT statement –

SELECT * FROM body_parts_personal_car WHERE RefNo = inRefNo;

in my case. Even if I write SELECT Now(); or SELECT vehicleTypeID; before it, the stored procedure throws the same error. If I comment this SELECT statement out, the stored procedure WORKS.

The same stored procedure works on localhost perfectly. I am using phpMyAdmin on remote server to maintain my database.

Any help please?

EDIT: I am receiving same problem in all stored procedures which have multiple SELECT statements to be returned back as ResultSet.

And, if I click Execute from the list of stored procedures in phpMyAdmin, the stored procedure executes. But if I invoke the stored procedure with CALL <proc_name()>;, the above error is displayed.

2

Answers


  1. Chosen as BEST ANSWER

    There problem was with one or more of tables involved in the procedure. Some queries and procedure calls inside a procedure were giving errors as "illegal mix of collations xxxxxxxx". I had to set COLLATIONS of all char/varchar/enum fields of tables and parameters of procedures giving errors to utf8mb4_general_ci.


  2. The “Commands out of sync” error usually indicates the client side error (results from the previous result set have not been processed and remain in the buffer).

    If you are running the procedure from the phpMyAdmin, note that phpMyAdmin does not know to handle procedures returning multiple result sets. Try to run the command from MySQL command prompt and see if you get any errors.

    The procedure itself looks ok, apart from unnecessary SET FOREIGN_KEY_CHECKS-commands (the procedure does not do any update/insert).

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search