我有这段代码
DELIMITER $$
CREATE PROCEDURE inserting(IN rowcount INT)
BEGIN
declare i int;
declare codigo int;
declare nombre varchar(30);
declare apellido varchar(30);
declare fecha date;
declare sexo boolean;
declare sueldo float;
SET i = 0;
SET codigo = (SELECT MAX(codigo)+1 FROM trabajador);
WHILE i < rowcount
DO
SET nombre = CONCAT('nombre', codigo);
SET apellido = CONCAT('apellido', codigo);
SET fecha = DATE_ADD('2000-01-01', INTERVAL (RAND()*15*365) DAY);
SET sexo = FLOOR(RAND() * 2);
SET sueldo = 500.0 + RAND() * 4500.0;
INSERT INTO trabajador(codigo, nombre, apellido, fecha, sexo, sueldo)
VALUES (codigo, nombre, apellido, fecha, sexo, sueldo);
SET i = i + 1;
SET codigo = codigo + 1;
END WHILE;
END;
$$
DELIMITER ;
我得到了这个:
+--------+--------+----------+------------+------+---------+
| codigo | nombre | apellido | fecha | sexo | sueldo |
+--------+--------+----------+------------+------+---------+
| NULL | NULL | NULL | 2001-03-07 | 0 | 2750.63 |
| NULL | NULL | NULL | 2000-11-19 | 1 | 4084.73 |
| NULL | NULL | NULL | 2008-12-22 | 1 | 1511.38 |
| NULL | NULL | NULL | 2004-08-30 | 1 | 2622.88 |
| NULL | NULL | NULL | 2010-09-24 | 0 | 3522.82 |
| NULL | NULL | NULL | 2012-12-31 | 0 | 507.951 |
| NULL | NULL | NULL | 2000-09-14 | 0 | 519.938 |
| NULL | NULL | NULL | 2005-01-09 | 1 | 1880.39 |
| NULL | NULL | NULL | 2008-03-11 | 1 | 2392.52 |
| NULL | NULL | NULL | 2009-12-30 | 0 | 2131.24 |
+--------+--------+----------+------------+------+---------+
但是NULL是错误的......它必须在第一行,如下所示:
1 nombre1 apellido1
关于程序的错误是什么?
有人可以帮助我吗?答案 0 :(得分:1)
试试这个:
DELIMITER $$
CREATE PROCEDURE inserting(IN rowcount INT)
BEGIN
declare i int;
declare codigo int;
declare nombre varchar(30);
declare apellido varchar(30);
declare fecha date;
declare sexo boolean;
declare sueldo float;
SET i = 0;
SET codigo = (SELECT MAX(codigo)+1 FROM trabajador);
WHILE i < rowcount
DO
SET nombre = CONCAT('nombre', codigo);
SET apellido = CONCAT('apellido', codigo);
SET fecha = DATE_ADD('2000-01-01', INTERVAL (RAND()*15*365) DAY);
SET sexo = FLOOR(RAND() * 2);
SET sueldo = 500.0 + RAND() * 4500.0;
INSERT INTO trabajador(codigo, nombre, apellido, fecha, sexo, sueldo)
VALUES (codigo, nombre, apellido, fecha, sexo, sueldo);
SET i = i + 1;
SET codigo = codigo + 1;
END WHILE;
END;
$$
DELIMITER ;
您需要在过程原型中声明参数类型。意思是,变量是IN,还是OUT或INOUT。如果过程返回一个值,则必须将其声明为OUT,否则为IN(用于在过程中引用)。如果使用它并返回相同的变量值,那么我们需要使用INOUT。