Я обновляю хранимую процедуру, которая принимает _POST информацию и сохраняет ее в базе данных MySQL. Изменена структура таблицы; Некоторые атрибуты изменились с TINYINT (0,1) на ENUM (Да/Нет).Обновление старой хранимой процедуры после изменения структуры базы данных
Однако, когда я изменяю процедуру, чтобы отразить это, я получаю ошибку синтаксического анализа. Значение моего нового заявления написано неправильно. Я не уверен, как я сделал это неправильно.
код здесь: сообщение
DROP PROCEDURE IF EXISTS DSSv3_SummaryInfo_insertPostInfo;
DELIMITER //
CREATE PROCEDURE DSSv3_SummaryInfo_insertPostInfo(
IN InProjectID INT,
IN InTimeframe VARCHAR(25),
IN InDateSpent VARCHAR(3000),
IN InDateSpentDesc VARCHAR(3000),
IN InQaName INT,
IN InWhyStoreDesc TEXT,
IN InChannelTypeDesc TEXT,
IN InOtherEntitiesDesc TEXT,
IN InNetworkDiagramDesc TEXT,
IN InScopingMethods TEXT,
IN InScopingConfirmationMethods TEXT,
IN InScopingMethodEvaluation TEXT,
IN InScopingMethodDocumentation TEXT,
IN InScopingMethodAccuracy TEXT,
IN InScopingAssessorName INT,
IN InEnvironmentPeople TEXT,
IN InEnvironmentProcesses TEXT,
IN InEnvironmentTechnologies TEXT,
IN InEnvironmentLocations TEXT,
IN InEnvironmentOther TEXT,
IN InSegmentationUsed ENUM,
IN InNoSegmentationAssessor INT,
IN InSegmentationHow TEXT,
IN InSegmentationTechnologies TEXT,
IN InSegmentationValidate TEXT,
IN InSegmentationFunction TEXT,
IN InSegmentationIntegrity TEXT,
IN InWithSegmentationAssessor INT,
IN InCountriesEntityConductsBusiness TEXT,
IN InWirelessVerify TEXT,
IN InWirelessImpact TEXT,
IN InSamplingNotUsedAssessor INT,
IN InSamplingUsedAssessor INT,
IN InSamplingRational TEXT,
IN InSamplingStandardiseControl TEXT,
IN InSamplingControlValidation TEXT,
IN InThirdPartyAssessorPadss INT,
IN InThirdPartyAssessorP2pe INT,
IN InThirdPartyScopeReduction TEXT,
IN InThirdPartyComments TEXT,
IN InSpIsSp TINYINT,
IN InSpIncludedRequirements VARCHAR(3000),
IN InSpExcludedRequirements VARCHAR(3000),
IN InSpAssessor INT,
IN InSpIpAddr VARCHAR(1500),
IN InSpCustomerIpAddr VARCHAR(1500),
IN InQsInitial TINYINT,
IN InQsAmount TINYINT,
IN InQsPassAssessor INT,
IN InQsDocumentAssessor TEXT,
IN InQsCorrection TEXT,
IN InQsAssessorComments TEXT,
IN InQsAocAssessor TEXT
)
BEGIN
/*
set all _POST data for executive summary
InParam:
All _POST data variables on executive summary form
Excludes _FILES data
*/
IF NOT EXISTS (SELECT 1 FROM SummaryInfo WHERE ProjectID = InProjectID) THEN
INSERT INTO SummaryInfo(
ProjectID,
timeframe,
date_spent,
date_spent_desc,
qa_name,
why_store_desc,
channel_type_desc,
other_entities_desc,
network_diagram_desc,
scoping_methods,
scoping_confirmation_methods,
scoping_method_evaluation,
scoping_method_documentation,
scoping_method_accuracy,
scoping_assessor_name,
environment_people,
environment_processes,
environment_technologies,
environment_locations,
environment_other,
segmentation_used,
no_segmentation_assessor,
segmentation_how,
segmentation_technologies,
segmentation_validate,
segmentation_function,
segmentation_integrity,
with_segmentation_assessor,
countries_entity_conducts_business,
wireless_verify,
wireless_impact,
sampling_not_used_assessor,
sampling_used_assessor,
sampling_rational,
sampling_standardise_control,
sampling_control_validation,
third_party_assessor_padss,
third_party_assessor_p2pe,
third_party_scope_reduction,
third_party_comments,
sp_is_sp,
sp_included_requirements,
sp_excluded_requirements,
sp_assessor,
sp_ip_addr,
sp_customer_ip_addr,
qs_initial,
qs_amount,
qs_pass_assessor,
qs_document_assessor,
qs_correction,
qs_assessor_comments,
qs_aoc_assessor
)
VALUES (
InProjectID,
InTimeframe,
InDateSpent,
InDateSpentDesc,
InQaName,
InWhyStoreDesc,
InChannelTypeDesc,
InOtherEntitiesDesc,
InNetworkDiagramDesc,
InScopingMethods,
InScopingConfirmationMethods,
InScopingMethodEvaluation,
InScopingMethodDocumentation,
InScopingMethodAccuracy,
InScopingAssessorName,
InEnvironmentPeople,
InEnvironmentProcesses,
InEnvironmentTechnologies,
InEnvironmentLocations,
InEnvironmentOther,
InSegmentationUsed,
InNoSegmentationAssessor,
InSegmentationHow,
InSegmentationTechnologies,
InSegmentationValidate,
InSegmentationFunction,
InSegmentationIntegrity,
InWithSegmentationAssessor,
InCountriesEntityConductsBusiness,
InWirelessVerify,
InWirelessImpact,
InSamplingNotUsedAssessor,
InSamplingUsedAssessor,
InSamplingRational,
InSamplingStandardiseControl,
InSamplingControlValidation,
InThirdPartyAssessorPadss,
InThirdPartyAssessorP2pe,
InThirdPartyScopeReduction,
InThirdPartyComments,
InSpIsSp,
InSpIncludedRequirements,
InSpExcludedRequirements,
InSpAssessor,
InSpIpAddr,
InSpCustomerIpAddr,
InQsInitial,
InQsAmount,
InQsPassAssessor,
InQsDocumentAssessor,
InQsCorrection,
InQsAssessorComments,
InQsAocAssessor
);
ELSE
UPDATE SummaryInfo SET
timeframe = InTimeframe,
date_spent = InDateSpent,
date_spent_desc = InDateSpentDesc,
qa_name = InQaName,
why_store_desc = InWhyStoreDesc,
channel_type_desc = InChannelTypeDesc,
other_entities_desc = InOtherEntitiesDesc,
network_diagram_desc = InNetworkDiagramDesc,
scoping_methods = InScopingMethods,
scoping_confirmation_methods = InScopingConfirmationMethods,
scoping_method_evaluation = InScopingMethodEvaluation,
scoping_method_documentation = InScopingMethodDocumentation,
scoping_method_accuracy = InScopingMethodAccuracy,
scoping_assessor_name = InScopingAssessorName,
environment_people = InEnvironmentPeople,
environment_processes = InEnvironmentProcesses,
environment_technologies = InEnvironmentTechnologies,
environment_locations = InEnvironmentLocations,
environment_other = InEnvironmentOther,
segmentation_used = InSegmentationUsed,
no_segmentation_assessor = InNoSegmentationAssessor,
segmentation_how = InSegmentationHow,
segmentation_technologies = InSegmentationTechnologies,
segmentation_validate = InSegmentationValidate,
segmentation_function = InSegmentationFunction,
segmentation_integrity = InSegmentationIntegrity,
with_segmentation_assessor = InWithSegmentationAssessor,
countries_entity_conducts_business = InCountriesEntityConductsBusiness,
wireless_verify = InWirelessVerify,
wireless_impact = InWirelessImpact,
sampling_not_used_assessor = InSamplingNotUsedAssessor,
sampling_used_assessor = InSamplingUsedAssessor,
sampling_rational = InSamplingRational,
sampling_standardise_control = InSamplingStandardiseControl,
sampling_control_validation = InSamplingControlValidation,
third_party_assessor_padss = InThirdPartyAssessorPadss,
third_party_assessor_p2pe = InThirdPartyAssessorP2pe,
third_party_scope_reduction = InThirdPartyScopeReduction,
third_party_comments = InThirdPartyComments,
sp_is_sp = InSpIsSp,
sp_included_requirements = InSpIncludedRequirements,
sp_excluded_requirements = InSpExcludedRequirements,
sp_assessor = InSpAssessor,
sp_ip_addr = InSpIpAddr,
sp_customer_ip_addr = InSpCustomerIpAddr,
qs_initial = InQsInitial,
qs_amount = InQsAmount,
qs_pass_assessor = InQsPassAssessor,
qs_document_assessor = InQsDocumentAssessor,
qs_correction = InQsCorrection,
qs_assessor_comments = InQsAssessorComments,
qs_aoc_assessor = InQsAocAssessor
WHERE
ProjectID = InProjectID;
END IF;
END//
DELIMITER ;
Ошибка:
# 1064 - У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать вблизи «IN InNoSegmentationAssessor INT, IN InSegmentationH» в строке 22
Когда я изменяю ENUM обратно в INT, как это было до изменения структуры хранимая процедура загружается без ошибок. Однако он, конечно, не работает, потому что он не соответствует структуре базы данных.
Я искал ответ, но я точно знаю, что я делаю неправильно, в первую очередь в данном конкретном случае. Любые намеки или предложения были бы хорошими.
Да, это массовая процедура. Это устаревший код. Да, это ENUM. Он должен подготовить отчет.
Так что я должен снова определить значения? разве табличная структура не знает значение? ('да нет') ? – grimthaw
Параметры процедуры не являются частью таблицы. – Barmar
Вместо этого вы можете указать параметр процедуры как 'VARCHAR'. Когда вы используете их для вставки в таблицу, строки будут преобразованы в 'ENUM'. – Barmar