код ошибки 1064. Вставка данных в mysql

0

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

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

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

  • 0
    не используйте одинарные кавычки вокруг имени столбца
  • 0
    если я удаляю одинарную кавычку, я получаю следующую ошибку: Код ошибки: 1054. Неизвестный столбец «oablp1992» в «списке полей»
Показать ещё 5 комментариев
Теги:
stored-procedures

1 ответ

0
Лучший ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню