powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MYSQL CONCAT
2 сообщений из 2, страница 1 из 1
MYSQL CONCAT
    #39479253
Akex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте помогли написать процедуру по вставке данных в таблицы
name1 -Это название столбцов в table_main, который выбирается автоматически из таблицы список
таблица spisok;
+----+-------+-------+-----------+-------+--------------+---------------+
| id | title | cena | Vreaktiva | name | table_title | typeA |
+----+-------+-------+-----------+-------+--------------+---------------+
| 35 | АЛТ | 4.570 | 0.16 | alt | analiz_alt | biohim |
| 36 | АСТ | 4.570 | 0.16 | act | analiz_act | biohim |
| 70 | Сахар | NULL | NULL | sahar | analiz_sahar | biohim |
+----+-------+-------+-----------+-------+--------------+---------------+
Таблица biohim основная. она содержит результаты алт, аст , sahar(т.е столбцы alt, act,sahar).
мне нужно забрать значение alt из biohim и вставить analiz_alt. соответсвенно act,sahar.
Вроде процедура работачая. Если
set @ssss = concat('insert into ',table_name,'(UID,date,resultat) select UID,data ',name1,' from ',table_main,';'); меняю
на
set @ssss = concat('truncate ',table_name,';');
то процедура очищает в цикле все три таблицы.
Если произвожу вставку set @ssss = concat('insert into ',table_name,'(UID,resultat) VALUES(2,4);');
для проверки, она нормально вставляет значения во все три таблицы analiz_act, analiz_alt и analiz_sahar.
Но в последнюю таблицу вставляет почему то два значения.
Как избавить от этой ошибки?(Вставки лишней записи в последнюю таблицу).

И еще 1 проблема.
При использований данного CONCAT сервер выдает ошибку
Column count doesn't match value count at row 1/

set @ssss = concat('insert into ',table_name,'(UID,date,resultat) select UID,data ',name1,' from ',table_main,';');
не могу понять причину ошибки.
Помогите плиз!!!!!
Сама процедура:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
//
BEGIN
DECLARE done integer default 1;
DECLARE name1 varchar(64);
DECLARE table_name varchar(64);
DECLARE table_main varchar(64);
DECLARE cur1 cursor for select `name`, table_title, typeA from `spisok`;
declare continue handler for sqlstate '02000' set done=0;
open cur1;
while done DO
fetch cur1 into name1, table_name, table_main;
set @ssss = concat('insert into ',table_name,'(UID,date,resultat) select UID,data ',name1,' from ',table_main,';');
PREPARE stmt FROM @ssss;
execute stmt;
end while;
close cur1;
END

//
...
Рейтинг: 0 / 0
MYSQL CONCAT
    #39479928
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что FETCH следует выполнять не в начале итерационного кода, а непосредственно перед ним и в самом конце. Ибо последний FETCH приводит к ошибке, но хандлер обработает ошибку и продолжит выполнение кода. А т.к. новые данные не пришли - повторно вставятся предыдущие. И только по завершении этого круга в начале следующего проверится условие и цикл завершится.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MYSQL CONCAT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]