Пират Сокровищев
Профи
(550)
3 недели назад
В вашем коде есть несколько ошибок:
1. Вы пытаетесь вставить значение в столбец val, которого нет в таблице Persons. Вы создали только столбцы id и name.
2. Вы не используете переменную цикла inc для генерации уникальных значений для столбца id.
3. Вы не вызываете функцию GeekInc с аргументом.
Вот исправленная версия вашего кода:
CREATE TABLE Persons (id Int NOT NULL, name VARCHAR(10));
DELIMITER $$
CREATE FUNCTION GeekInc ()
RETURNS INT
BEGIN
DECLARE inc INT;
SET inc = 0;
label:
WHILE inc < 100 DO
SET inc = inc + 1;
INSERT INTO Persons (id, name) VALUES (inc, 'ASD');
END WHILE label;
RETURN inc;
END; $$
DELIMITER ;
-- Call the function to insert 100 rows
CALL GeekInc();
Это вставит 100 строк в таблицу Persons со значениями идентификаторов от 1 до 100 и значениями имён, равными «ASD».
Примечание: в MySQL обычно эффективнее использовать один оператор INSERT с несколькими значениями, а не цикл для вставки по одной строке за раз. Вы можете использовать один оператор INSERT со 100 значениями следующим образом:
INSERT INTO Persons (id, name) VALUES
(1, 'ASD'), (2, 'ASD'), (3, 'ASD'), ..., (100, 'ASD');
Однако динамическая генерация этого запроса может быть сложной задачей. Если вам нужно сгенерировать большое количество строк, возможно, стоит рассмотреть другой подход, например использование хранимой процедуры или скрипта для генерации запроса INSERT.
CREATE TABLE Persons (id Int NOT NULL,name VARCHAR(10));
DELIMITER $$
CREATE FUNCTION GeekInc ( value INT )
RETURNS INT
BEGIN
DECLARE inc INT;
SET inc = 0;
label:
WHILE inc <= 100 DO
SET inc = inc + value;
INSERT INTO Persons (id,name,val) VALUES (2, "ASD","ASD");
END
WHILE label;
RETURN inc;
END; $$
DELIMITER ;