Я создал следующую хранимую процедуру для вставки данных в базу данных:
CREATE DEFINER='PotatoHead'@'%' PROCEDURE 'InsertIntoTable'(in
tablename varchar(45),in ID varchar(45),in Project
varchar(45),in Variant varchar(45),
in ReleaseVersion varchar(45) ,
in TestBenchID varchar(45) ,
in TestCaseID int(11) ,
in TestCaseNamespace varchar(100) ,
in TestCaseName varchar(45),
in TestCaseDomain varchar(45) ,
in TestType varchar(45) ,
in HardwareVersion varchar(4000) ,
in SoftwareVersion varchar(4000),
in Result varchar(45) ,
in Comment varchar(4000),
in Duration varchar(45) ,
in StartTime varchar(45) ,
in EndTime varchar(45) )
BEGIN
SET @sql = CONCAT('Insert into ', tablename );
SET @sql = CONCAT('ID,Project,Variant,');
SET @sql = CONCAT('ReleaseVersion,');
SET @sql = CONCAT('TestBenchID ,');
SET @sql = CONCAT('TestCaseID ,');
SET @sql = CONCAT('TestCaseNamespace ,');
SET @sql = CONCAT('TestCaseName ,');
SET @sql = CONCAT('TestCaseDomain ,');
SET @sql = CONCAT('TestType ,');
SET @sql = CONCAT('HardwareVersion ,');
SET @sql = CONCAT('SoftwareVersion ,');
SET @sql = CONCAT('Result ,');
SET @sql = CONCAT('Comment ,');
SET @sql = CONCAT('Duration ,');
SET @sql = CONCAT('StartTime ,');
SET @sql = CONCAT('EndTime) VALUES (');
SET @sql = CONCAT(ID,',',Project,',',Variant,',',
ReleaseVersion,',',
TestBenchID,',',
TestCaseID,',',
TestCaseNamespace ,',',
TestCaseName ,',',
TestCaseDomain ,',',
TestType ,',',
HardwareVersion ,',',
SoftwareVersion ,',',
Result ,',',
Comment ,',',
Duration ,',',
StartTime ,',',
EndTime,');');
PREPARE s FROM @sql;
EXECUTE s;
DEALLOCATE PREPARE s;
END
когда я пытаюсь вызвать это со следующим запросом:
Call InsertIntoTable('oablp1992','id','project','variant',
'releaseversion',
'testbenchid',
1,
'testcasenamespace',
'testcasename',
'Domain',
'type',
'hardware',
'software',
'result',
'comment',
'Duration',
'starttime',
'endtime');
Insert into oablp1992(ID,Project,Variant,
ReleaseVersion,
TestBenchID ,
TestCaseID ,
TestCaseNamespace ,
TestCaseName ,
TestCaseDomain ,
TestType ,
HardwareVersion ,
SoftwareVersion ,
Result ,
Comment ,
Duration ,
StartTime ,
EndTime) VALUES('id','project','variant',
'releaseversion',
'testbenchid',
'1',
'testcasenamespace',
'testcasename',
'Domain',
'type',
'hardware',
'software',
'result',
'comment',
'Duration',
'starttime',
'endtime');
Я получаю следующую ошибку:
Код ошибки: 1064. У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с "id, project, variant, releaseversion, testbenchid, 1, testcasenamespace, testcasename, D" в строке 1
как решить эту проблему?
Было бы понятнее, если бы вы использовали соглашение об именах, которое четко выделяло параметры из имен столбцов. Но, возможно, это то, что вы хотите. Обратите внимание на использование символа ascii 39 (одинарная кавычка).
drop procedure if exists 'InsertIntoTable';
delimiter $$
CREATE PROCEDURE 'InsertIntoTable'(in
tablename varchar(45),
in ID varchar(45),
in Project varchar(45),
in Variant varchar(45),
in ReleaseVersion varchar(45) ,
in TestBenchID varchar(45) ,
in TestCaseID int(11) ,
in TestCaseNamespace varchar(100) ,
in TestCaseName varchar(45),
in TestCaseDomain varchar(45) ,
in TestType varchar(45) ,
in HardwareVersion varchar(4000) ,
in SoftwareVersion varchar(4000),
in Result varchar(45) ,
in inComment varchar(4000),
in Duration varchar(45) ,
in StartTime varchar(45) ,
in EndTime varchar(45) )
BEGIN
SET @sql = CONCAT('Insert into ', tablename ,
'(ID,Project,Variant,',
'ReleaseVersion,',
'TestBenchID,' ,
'TestCaseID,' ,
'TestCaseNamespace,'
'TestCaseName,' ,
'TestCaseDomain,' ,
'TestType,' ,
'HardwareVersion,' ,
'SoftwareVersion,' ,
'Result,' ,
CHAR(96),'Comment',CHAR(96),',' ,
'Duration,' ,
'StartTime,' ,
'EndTime',') values ('
);
SET @sql = CONCAT(@SQL,
char(39),ID,char(39),',',
char(39),Project,char(39),',',
char(39),Variant,char(39),',',
char(39),ReleaseVersion,char(39),',',
char(39),TestBenchID,char(39),',',
char(39),TestCaseID,char(39),',',
char(39),TestCaseNamespace ,char(39),',',
char(39),TestCaseName ,char(39),',',
char(39),TestCaseDomain ,char(39),',',
char(39),TestType ,char(39),',',
char(39),HardwareVersion ,char(39),',',
char(39),SoftwareVersion ,char(39),',',
char(39),Result ,char(39),',',
char(39),inComment ,char(39),',',
char(39),Duration ,char(39),',',
char(39),StartTime ,char(39),',',
char(39),EndTime,char(39),');');
select @sql;
#PREPARE s FROM @sql;
#EXECUTE s;
#DEALLOCATE PREPARE s;
END $$
delimiter ;
Call InsertIntoTable('oablp1992','id','project','variant',
'releaseversion',
'testbenchid',
1,
'testcasenamespace',
'testcasename',
'Domain',
'type',
'hardware',
'software',
'result',
'comment',
'Duration',
'starttime',
'endtime');
Что создает этот оператор sql
Insert into oablp1992(
ID,Project,Variant,ReleaseVersion,TestBenchID,TestCaseID,TestCaseNamespace,
TestCaseName,TestCaseDomain,TestType,HardwareVersion,SoftwareVersion,
Result,'Comment',Duration,StartTime,EndTime)
values (
'id','project','variant','releaseversion','testbenchid','1','testcasenamespace',
'testcasename','Domain','type','hardware',
'software','result','comment','Duration','starttime','endtime');
Не забудьте удалить прокомментированные строки, когда вы хотите передать это в sql.