Операнд должен содержать 1 столбец (столбцы), пытаясь сгенерировать данные добровольца - PullRequest
0 голосов
/ 05 апреля 2020

Кажется, я не могу решить мою проблему.

Моя хранимая процедура:

CREATE DEFINER=`myschoolusername`@`%` PROCEDURE `generate_volunteers`(in nfolks int)
BEGIN
  set @i=0;
  while @i < nfolks do
     insert into Volunteer(firstname, lastname, dateofbirth) 
     values (((floor(1+(rand()*(4-1))), "Fred", "Wang", "Fatimah", "Marcella")),
     ((floor(1+(rand()*(3-1))), "Kaser", "Fang", "Kumar")),
     DATE_ADD('1965-01-01', INTERVAL rand()*200000 DAY));
  set @i = @i+1;
  end while;
END

Кроме того, вот моя таблица добровольцев в моем скрипте MYSQL:

drop table if exists Volunteer;
create Table Volunteer(
member_num int not null auto_increment primary key,
firstname varchar(20) not null,
lastname varchar(20) not null,
dateofbirth date not null
);

Я пытаюсь вставить 500 строк в эту таблицу, однако появляется ошибка 1305.

Любая помощь очень ценится, я совершенно не уверен, куда go с этого момента.

1 Ответ

0 голосов
/ 05 апреля 2020

Этот лог c ничего не делает:

(floor(1+(rand()*(4-1))), "Fred", "Wang", "Fatimah", "Marcella"))

Хотя это не самый эффективный способ, для 500 строк это подойдет:

 insert into Volunteer(firstname, lastname, dateofbirth) 
     select f.firstname, l.lastname,
            DATE_ADD('1965-01-01', INTERVAL rand()*200000 DAY)
     from (select 'Fred' as firstname union all
           select 'Wang' union all
           select 'Fatimah' union all
           select 'Marcella'
          ) f cross join
          (select 'Kaser' as lastname union all
           select 'Fang' union all
           select 'Kumar'
          ) l
     order by rand()
     limit 1;

Я думаю, что вы на самом деле пытается написать:

 insert into Volunteer(firstname, lastname, dateofbirth) 
     select elt(floor(rand() * 4) + 1,
                'Fred', 'Wang', 'Fatimah', 'Marcella'
               ) as firstname,
            elt(floor(rand() * 3) + 1,
                'Kaser', 'Fang', 'Kumar'
               ) as lastname,
            DATE_ADD('1965-01-01', INTERVAL rand()*200000 DAY);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...