L'exemple ci-dessous servira à alimenter une table habilement nommée "toto" avec un nombre de lignes mis en paramètres.

Tout d'abord, nous allons aborder le cas de PostgreSQL

CREATE TABLE toto (
    id serial NOT NULL,
    nom character varying(50),
    prenom character varying(50),
    age integer
);

--
ALTER TABLE ONLY toto
    ADD CONSTRAINT toto_pk PRIMARY KEY (id);

Le type de donnée "serial" est l'équivalent de l'auto-incrément.
Maintenant le code de la fonction :


CREATE OR REPLACE FUNCTION import_data(nb_lines IN integer
RETURNS void AS $func$
DECLARE
    integer;
BEGIN 
    0;
    LOOP
        INSERT INTO TOTO (NOMPRENOMAGE)
        values ('toto'||i,'titi'||imod(i,90));
        
        i=i+1;
        
        EXIT WHEN nb_lines
    END LOOP;

END;
$funcLANGUAGE plpgsql;

NB : seules les fonctions existent sous PostgreSQL, les procédures ne sont que des fonctions qui retournent un paramètre "void"
On exécute ensuite cette fonction : select import_data(1000000);


Le même exemple sous Mysql :

CREATE TABLE toto (
  id int(6NOT NULL AUTO_INCREMENT,
  nom varchar(100DEFAULT NULL,
  prenom varchar(100DEFAULT NULL,
  age int(3DEFAULT NULL,
  PRIMARY KEY (id)
ENGINE=MyISAM DEFAULT CHARSET=latin1;

Et maintenant le code de la procédure :

delimiter |

DROP PROCEDURE import_data|

CREATE PROCEDURE import_data(max INT)
BEGIN
DECLARE INT  DEFAULT 0;
   loading_loopLOOP
     SET i=i+1;
     insert into toto (nomprenomage)
     values (concat('toto',i),concat('titi',i), mod(i,90));
     IF i=max THEN 
        LEAVE loading_loop;
     END IF;
   END LOOP loading_loop;
END
|

delimiter ;

On exécute ensuite cette procédure : call import_data(1000000);


Références :
Documentation PostgreSQL
Documentation Mysql