I can’t seem to troubleshoot my problem.
My stored procedure:
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
Additionally, here is my volunteer table in my MYSQL script:
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 );
I am trying to insert 500 lines into this table, however error 1305 is coming up.
Any help is heavily appreciated, I am quite unsure of where to go from this point.
Advertisement
Answer
This logic doesn’t do anything:
(floor(1+(rand()*(4-1))), "Fred", "Wang", "Fatimah", "Marcella"))
Although not the most efficient, this should be fine for 500 rows:
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;
I think you are actually trying to write:
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);