博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySql、PostgreSql、SqlServer三种数据库的造数存储过程实例
阅读量:5368 次
发布时间:2019-06-15

本文共 5516 字,大约阅读时间需要 18 分钟。

主要实例:把临时表tmp_table数据插入到目标表target_table

 

一、MySql造数存储过程实例

mysql造数

 

-- 第一步,创建临时表CREATE TEMPORARY TABLEIF NOT EXISTS tmp_table (    `id` VARCHAR (64) NOT NULL,    `second_id` VARCHAR (64) NOT NULL,    `total_amount` DOUBLE (18, 2) DEFAULT NULL,    `total_day` INT (11) DEFAULT NULL,    `create_time` datetime NOT NULL,    `edit_time` datetime DEFAULT NULL,    `editor` VARCHAR (50) DEFAULT NULL,    `status` INT (11) NOT NULL DEFAULT '0') DEFAULT CHARSET = utf8mb4;-- 第二步,使用前先清空临时表    TRUNCATE TABLE tmp_table;-- 第三步,定义存储过程 -- 生成5-10位随机正整数ceiling(5 - 1 + rand() *(10 -(5 - 1))) -- 生成5-7位随机正整数 FLOOR(5 + RAND() *(7 + 1 - 5))
#定义存储过程delimiter ##num_limit 要插入数据的数量,rand_limit 最大随机的数值 DROP PROCEDUREIF EXISTS insert_test_val ; CREATE PROCEDURE insert_test_val (IN num_limit INT)BEGINDECLARE i INT DEFAULT 1; DECLARE id VARCHAR (64) DEFAULT 1;DECLARE second_id VARCHAR (64) DEFAULT 1;            WHILE i <= num_limit DO                INSERT INTO testdb.tmp_table (                    `id`,                    `second_id`,                    `total_amount`,                    `total_day`,                    `create_time`,                    `edit_time`,                    `editor`,                    `status`                )            VALUES                (                    id,                    second_id,                    ceiling(5 - 1 + rand() *(10 -(5 - 1))),                    FLOOR(5 + RAND() *(7 + 1 - 5)),                    SYSDATE(),                    SYSDATE(),                    'mysql存储过程',                    '0'                ) ;            SET id = id + 1 ;            SET second_id = second_id + 1 ;            SET i = i + 1 ;            END            WHILE ;END -- 第四步,调用存储过程,插入1万条数据#调用存储过程CALL insert_test_val (10000) ; -- 第五步,可跳过#查看临时表(检查存储过程是否生成数据)SELECT * FROM tmp_table ; -- 第六步,插入到目标表INSERT INTO `testdb`.`target_table` (`id`,`second_id`,`total_amount`,`total_day`,`create_time`,`edit_time`,`editor`,`status`) SELECT * FROM tmp_table ; -- 第七步,删除存储过程生成的数据(若不需要删除则跳过)DELETE FROM TB_CS_CASE_ORDER WHERE id = second_id ; -- 第八步,删除存储过程(若不需要删除则跳过)DROP PROCEDURE IF EXISTS insert_test_val ;

 

 

二、PostgreSql造数存储过程实例

postgresql造数

-- 第一步,创建临时表CREATE TEMPORARY TABLEIF NOT EXISTS tmp_table2 (    "encryptionphone_text" VARCHAR (32) COLLATE "default",    "user_id" int4,    "target_code" VARCHAR (32) COLLATE "default",    "target_time" TIMESTAMP (6),    "creator" VARCHAR (128) COLLATE "default",    "create_time" TIMESTAMP (6) DEFAULT now(),    "editor" VARCHAR (128) COLLATE "default",    "edit_time" TIMESTAMP (6) DEFAULT now(),    "status" bool DEFAULT TRUE);-- 第二步,使用前先清空临时表TRUNCATE TABLE tmp_table2;-- 第三步,定义存储过程,num_limit 要插入数据的数量DROP FUNCTIONIF EXISTS insert_test2();CREATE OR REPLACE FUNCTION insert_test2(IN num_limit INT) RETURNS void AS $$DECLARE    i INT DEFAULT 1;DECLARE    encryptionphone_text INT DEFAULT 1;DECLARE  initDate INT DEFAULT 1565332582;DECLARE  initDateStr timestamp;BEGINWHILE i <= num_limit LOOPinitDateStr := to_timestamp(initDate+60*60*24*1+encryptionphone_text%(60*60*24*17));INSERT INTO tmp_table2 (    "encryptionphone_text",    "user_id",    "target_code",    "target_time",    "creator",    "create_time",    "editor",    "edit_time",    "status")VALUES    (        '1a2b3c4d5e6f7g8h9i' || CAST (@encryptionphone_text AS VARCHAR (32)),        i,        '9876543210',        initDateStr,        'insert_test2函数所造',        now(),        NULL,        now(),        't'    );encryptionphone_text := encryptionphone_text + 1;i := i + 1;END LOOP;END; $$ LANGUAGE plpgsql;-- 第四步,调用存储过程,插入1万条数据SELECT insert_test2(10000);-- 第五步,查询临时表(可跳过)select * from tmp_table2;-- 第六步,插入到目标表INSERT INTO target_table("encryptionphone_text", "user_id", "target_code", "target_time", "creator", "create_time", "editor", "edit_time", "status") SELECT * from tmp_table2;-- 第七步,检查插入数据是否正确SELECT count(1) from target_table;-- 第八步,删除存储过程(若不需要删除则跳过)DROP FUNCTION insert_test2(IN num_limit INT);

 

除了上面格式的存储过程,可在转化数据后再插入数据,例子如下:

-- 第一步,创建临时表CREATE TEMPORARY TABLE if not exists tmp_table ("phone_md5" varchar(32) COLLATE "default");-- 第二步,使用前先清空临时表TRUNCATE TABLE tmp_table;-- 第三步,定义存储过程,num_limit 要插入数据的数量DROP FUNCTIONIF EXISTS insert_test1();CREATE OR REPLACE FUNCTION insert_test1(IN num_limit INT) RETURNS void AS $$DECLARE    i INT DEFAULT 1390000000;BEGINWHILE i <= num_limit LOOPINSERT INTO tmp_table("phone_md5") VALUES (i);i := i + 1;END LOOP;END; $$ LANGUAGE plpgsql;-- 第四步,调用存储过程,插入1万条数据SELECT insert_test1(1390010000);-- 第五步,查询临时表(可跳过)select * from tmp_table;-- 第六步,插入到目标表INSERT INTO encryptionphone_list("phone_md5") SELECT md5(phone_md5) from tmp_table;-- 第七步,检查插入数据是否正确SELECT count(1) from encryptionphone_list;-- 第八步,删除存储过程DROP FUNCTION insert_test1(IN num_limit INT);

 

三、SqlServer造数存储过程实例

sqlserver造数

 

-- 第一步,删掉##aa缓存表drop table ##aa;-- 第二步,定义缓存表##aaif OBJECT_ID('tempdb..##aa') is not nulldrop table ##aaCREATE TABLE ##aa([phone] varchar(32)   NULL ,[name] varchar(32)   NULL ,[CreateDate] datetime NULL DEFAULT (getdate()) ,[EditDate] datetime NULL DEFAULT (getdate()) )-- 第三步,清空缓存表TRUNCATE TABLE ##aa;    -- 第四步,定义存储过程,并执行DECLARE @i INTDECLARE @s VARCHAR(20)declare @phone intSET @i=1set @phone=10000000WHILE @i<=10000000BEGINSELECT @s=CAST(@i as VARCHAR(20))insert into ##aaselect '131'+CAST(@phone as VARCHAR(20)), '简单存储生成'+i, GETDATE(), GETDATE()set @phone=@phone+1set @i=@i+1end-- 第五步,把缓存表数据插入到目标表insert into target_table( [phone], [name], [CreateDate], [EditDate])select * from ##aa;-- 第六步,检查目标表数据select * from target_table;

 

转载于:https://www.cnblogs.com/yulia/p/11326487.html

你可能感兴趣的文章
mysql 同一个表中 字段a 的值赋值到字段b
查看>>
linux系统可执行文件添加环境变量使其跨终端和目录执行
查看>>
antiSMASH数据库:微生物次生代谢物合成基因组簇查询和预测
查看>>
UNICODE与ANSI的区别
查看>>
nginx 配置实例
查看>>
Flutter - 创建底部导航栏
查看>>
ASP.NET MVC 教程-MVC简介
查看>>
SQL Server索引 - 聚集索引、非聚集索引、非聚集唯一索引 <第八篇>
查看>>
转载:详解SAP TPM解决方案在快速消费品行业中的应用
查看>>
Android OpenGL ES 开发(N): OpenGL ES 2.0 机型兼容问题整理
查看>>
项目中用到的技术及工具汇总(持续更新)
查看>>
【算法】各种排序算法测试代码
查看>>
HDU 5776 Sum
查看>>
201521123044 《Java程序设计》第9周学习总结
查看>>
winfrom 图片等比例压缩
查看>>
人工智能实验报告一
查看>>
用LR12录制app,用LR11跑场景,无并发数限制,已试验过,可行!
查看>>
python 多线程就这么简单(转)
查看>>
oracle 简述
查看>>
ajax如何向后台传递数组,在后台该如何接收的问题(项目积累)
查看>>