Вот сокращенный скрипт моей хранимой процедуры:
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 ;
Теперь, при выполнении хранимой процедуры с этим оператором:
CALL GetVehicleDetails('some ref no', 'interim-survey');
выдается ошибка:
Stati c анализ:
1 ошибок было обнаружено во время анализа.
Отсутствует выражение. (около «ON» в позиции 25)
SQL запрос: Edit Edit
SET FOREIGN_KEY_CHECKS = ON;
MySQL сказал: Документация
2014 - команды не синхронизированы; Вы не можете выполнить эту команду сейчас
Я заметил, что хранимая процедура выдает второй SELECT
оператор -
SELECT * FROM body_parts_personal_car WHERE RefNo = inRefNo;
в моем случае. Даже если я напишу SELECT Now();
или SELECT vehicleTypeID;
перед этим, хранимая процедура выдает ту же ошибку. Если я закомментирую этот оператор SELECT, хранимая процедура РАБОТАЕТ.
Та же самая хранимая процедура отлично работает на localhost. Я использую phpMyAdmin на удаленном сервере для поддержки своей базы данных.
Любая помощь, пожалуйста?
РЕДАКТИРОВАТЬ: я получаю ту же проблему во всех хранимых процедурах, которые имеют несколько операторов SELECT
, которые должны быть возвращены обратно как ResultSet.
И, если я нажму Выполнить из списка хранимых процедур в phpMyAdmin, хранимая процедура будет выполнена. Но если я вызову хранимую процедуру с CALL <proc_name()>;
, отобразится вышеуказанная ошибка.