Не удается обновить данные в Mysql

#java #android #mysql #sql #database

Вопрос:

Я пытаюсь обновить данные в Mysql или обновить, если они существуют, но я получаю эту ошибку:

#1064 — У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного использования синтаксиса рядом с разделителем’;
вызовите insertIfNotNull((ВЫБЕРИТЕ checkin_id ИЗ `_9′ в строке 1

Это запрос, который я использую для обновления или вставки данных:

 DROP FUNCTION IF EXISTS insertIfNotNull;                    
delimiter $                                        
create function insertIfNotNull(checkin int(11))                     
returns int                     
BEGIN                         
   IF checkin IS NOT NULL THEN                              
      UPDATE `_914_table_checkin` SET clock_in = '2021-6-15 12:09:20', break_in = 'null', break_out = 'null', clock_out = '2021-6-15 12:09:41' WHERE checkin_id = checkin ;                        
   ELSE                             
      INSERT INTO `_914_table_checkin` (company_id, manager_id, worker_id, added_by, clock_in, break_in, break_out, clock_out, date) VALUES (4,214,225,'manager','2021-6-15 12:09:13','null','null','2021-6-15 12:09:34','2021-6-15');
   end if;
   return 2;                     
END                    
$                    
delimiter;
call insertIfNotNull((SELECT checkin_id FROM `_914_table_checkin` WHERE company_id = 4 AND manager_id = 214 AND worker_id = 214 AND date = '2021-6-15'))
 

Комментарии:

1. Интересно, не в том ли проблема, что используемый вами API ожидает только одного оператора.

2. Я пытаюсь сделать это напрямую из phpMyAdmin

3. 2021-6-15 12:09:20 может быть, действительная дата? 2021-06-15 12:09:20

4. Это действительно так. Это работает, когда я использую его как отдельное утверждение, например UPDATE _914_table_checkin SET clock_in = '2021-6-15 12:09:20', break_in = 'null', break_out = 'null', clock_out = '2021-6-15 12:09:41' WHERE checkin_id = 200 ;

5. Я думаю, вам просто нужен пробел после разделителя

Ответ №1:

Вы неправильно _914_tabela_checkin ввели последнюю строку. Это должно быть:

 call insertIfNotNull((SELECT checkin_id FROM `_914_table_checkin` WHERE company_id = 4 AND manager_id = 214 AND worker_id = 214 AND date = '2021-6-15'))
 

Комментарии:

1. Это была техническая ошибка, когда я задал этот вопрос. Проблема не в этом