код ошибки 1064. Вставка данных в mysql - PullRequest
0 голосов
/ 28 мая 2018

Я создал следующую хранимую процедуру для вставки данных в базу данных:

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, проект, вариант, версия выпуска, testbenchid, 1, testcasenamespace, testcasename, D» в строке 1

, как решить эту проблему

1 Ответ

0 голосов
/ 28 мая 2018

Было бы понятнее, если бы вы использовали соглашение об именах, которое четко отличало параметры от имен столбцов.Но, возможно, это то, что вы хотите.Обратите внимание на использование символа 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...