存储过程

168 阅读2分钟

语法:
创建:
create procedure 存储过程名(参数)
存储过程开始和结束语:
begin .....end
变量赋值:
set x=1
定义变量:
declare y int defaut 0
创建存储过程函数:
create function 函数名(参数)
调用存储过程:
call 存储过程名(参数)\

首先需要定义表的结构,然后编写一个存储过程来执行插入操作。

下面是一个基于SQL Server的示例,展示了如何完成这个任务。请注意,不同数据库系统(如MySQL, PostgreSQL, Oracle等)的语法可能有所不同,但基本思路是相似的。

步骤 1: 定义表结构

首先,我们需要在数据库中定义一个包含10个字段的表。

这里假设这些字段包括ID(主键,自增)、Name(字符串)、Age(整型)、Email(字符串)等7个字段,为简单起见,我们仅列出四个字段,但你可以根据需要扩展到10个。

CREATE TABLE MyTable ( 
    ID INT IDENTITY(1,1) PRIMARY KEY, 
    Name VARCHAR(100), 
    Age INT, 
    Email VARCHAR(100) -- 添加其他7个字段... 
);

步骤 2: 编写存储过程

接下来,我们编写一个存储过程来插入数据。由于直接插入5000条数据在单个INSERT语句中可能不太实际(特别是如果每个值都需要单独指定),我们可以考虑使用循环或表值参数(对于大量数据,表值参数可能更有效,但这里为了简单起见,我们使用循环)。

注意:对于大量数据的插入,直接使用循环可能不是最高效的方法,特别是当数据量非常大时。但这里为了演示如何使用存储过程,我们采用这种方法。

CREATE PROCEDURE Insert5000Records 
AS 
BEGIN 
    DECLARE @i INT = 0; 
    
    WHILE @i < 5000 
    BEGIN 
        INSERT INTO MyTable (Name, Age, Email) 
        VALUES ('Name' + CAST(@i AS VARCHAR), 20 + (@i % 50), 'email' + CAST(@i AS VARCHAR) + '@example.com'); 
        
        SET @i = @i + 1; 
    END 
END 
GO

步骤 3: 执行存储过程

现在,我们可以执行这个存储过程来插入5000条数据。

EXEC Insert5000Records;

插入批量1000条数据:

DROP PROCEDURE IF EXISTS pro_users;
 
DELIMITER
CREATE PROCEDURE pro_users(IN inr int)
  BEGIN
  DECLARE i INT DEFAULT 0;
  START TRANSACTION;
   WHILE i<inr DO
    INSERT INTO USERS(id, NAME,EMAIL,AGE,SEX,ID_CARD,MOBILE_PHONE) values(i,'曹植','liuhuyuan@163.com',29,'男','131081197803061637',13663776677); 
    commit;                     
         SET i=i+1; 
   END WHILE; 
  COMMIT;
  END;
 
call pro_users(1000)

使用concat()拼接得到每组数据不同

DROP PROCEDURE IF EXISTS generate_user_data;
CREATE PROCEDURE generate_user_data()
BEGIN
	DECLARE COUNT_NUM INT DEFAULT 0;
	WHILE COUNT_NUM <100 DO
	INSERT INTO user_info values (null,concat('name',COUNT_NUM),md5('password'),'address');
	SET COUNT_NUM = COUNT_NUM+1;
	END WHILE;
END;