mysql存储过程(查询数据库 游标循环 if判断 插入别的数据库)

BEGIN

declare f_age int;
DECLARE incode1 VARCHAR(100);
DECLARE incode2 VARCHAR(100);
DECLARE incode3 VARCHAR(100);
DECLARE incode4 VARCHAR(100);
DECLARE incode5 VARCHAR(100);
DECLARE incode6 VARCHAR(100);
declare a1 int;
declare a2 int;
declare a3 int;
declare a4 int;
declare b int default 0;
declare b1 int default 0;
declare f_id varchar(100);
declare f_eventtime varchar(100);
declare f_eventdata varchar(100);
declare f_addtime varchar(100);
declare f_uptime varchar(100); /*是否达到记录的末尾控制变量*/
declare f_name varchar(100);
declare f_shortname varchar(100);
declare f_logo varchar(100);
declare f_qyxz2 varchar(100);
declare f_sshy2 varchar(100);
declare f_ssqy2 varchar(100);
declare f_lxdh varchar(100);
declare f_lxcz varchar(100);
declare f_zcd varchar(100);
declare f_fddbr varchar(100);
declare f_qsjg varchar(100);
declare f_qsjgdbr varchar(100);
declare f_lssws varchar(100);
declare f_qzlv varchar(100);
declare f_kjssws varchar(100);
declare f_qzkjs varchar(100);
declare f_brief varchar(100);
declare f_delflag varchar(100);
declare f_code varchar(100);
declare a varchar(100);
DECLARE cur_1 CURSOR FOR select
name as f_name,
shortname f_shortname,
logo f_logo,
qyxz2 f_qyxz2,
sshy2 f_sshy2,
ssqy2 f_ssqy2 ,
lxdh f_lxdh,
lxcz f_lxcz,
zcd f_zcd,
fddbr f_fddbr,
qsjg f_qsjg,
qsjgdbr f_qsjgdbr,
lssws f_lssws,
qzlv f_qzlv,
kjssws f_kjssws,
qzkjs f_qzkjs,
brief f_brief,
delflag f_delflag,
batchno f_eventdata,
code f_code
from bl_b_companyenenthistory_stop where isnew=1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1;
set f_id=‘BL_L‘;
SELECT MAX(incode) into incode1 from bl_b_companyevent;
set incode2=SUBSTRING(incode1,5,1);
if incode2=0 THEN
set incode5=SUBSTRING(incode1,6,LENGTH(incode1));
set incode3=‘BL_L0‘;
set incode4=CONCAT(incode3,incode5);
end if;
if incode2!=0 THEN
set incode5=SUBSTRING(incode1,5,LENGTH(incode1));
set incode3=‘BL_L‘;
set incode4=CONCAT(incode3,incode5);
end if;
OPEN cur_1;
FETCH cur_1 INTO f_name,
f_shortname,
f_logo,
f_qyxz2,
f_sshy2,
f_ssqy2,
f_lxdh,
f_lxcz,
f_zcd,
f_fddbr,
f_qsjg,
f_qsjgdbr,
f_lssws,
f_qzlv,
f_kjssws,
f_qzkjs,
f_brief,f_delflag,f_eventdata,f_code;

while b<>1 do
set incode5 =incode5+1;
set incode6=CONCAT(incode3,incode5);
select f_name,f_shortname,f_logo,f_qyxz2,f_sshy2,f_ssqy2;
IF f_name is not null then
select count(*) into a2 from bl_b_companyevent WHERE bklx = 1 and sslx=‘01‘ and eventstatus=‘01‘ and isnew=‘1‘ and name=f_name ;
if a2=0 THEN
select count(*) into a3 from bl_b_companyevent
WHERE
bklx = 1
and
sslx=‘01‘
and
eventstatus=‘02‘
AND
checkstatus=‘05‘
and
isnew=‘1‘
and name=f_name;

if a3=0 THEN
SELECT ‘添加数据‘;
insert into bl_b_companyevent(
id,
sclx,
sclx2,
bklx,
sslx,
eventstatus,
eventstatus2,
checkstatus,
checkstatus2,
eventtime,
eventdata,
incode,
name,
namehistory,
shortname,
shortnamehistory,
logo,
qyxz2,
sshy2,
ssqy2,
lxdh,
lxcz,
zcdz,
fddbr,
qsjg,
qsjgmc,
qsjbrmc,
lsswsmc,
lsjbrmc,
kjsswsmc,
kjsswsjbrmc,
gsjj,
addr,
addtime,
uptr,
upttime,
isnew,
delflag,
sslx2
)
VALUES(
CONCAT(f_id,REPLACE(UUID(),‘-‘,‘‘)),
‘09‘,
‘其他‘,
1,
‘01‘,
‘02‘,
‘审核中‘,
‘05‘,
‘中止审查‘,
date_format(REPLACE(f_eventdata,"-",""),‘%Y-%m-%d %H:%i:%s‘),
date_format(REPLACE(f_eventdata,"-",""),‘%Y-%m-%d‘),
incode6,
f_name,
f_name,
f_shortname,
f_shortname,
f_logo,
f_qyxz2,
f_sshy2,
f_ssqy2,
f_lxdh,
f_lxcz,
f_zcd,
f_fddbr,
f_qsjg,
f_qsjg,
f_qsjgdbr,
f_lssws,
f_qzlv,
f_kjssws,
f_qzkjs,
f_brief,
pd_addr,
NOW(),
pd_uptr,
NOW(),
‘1‘,
f_delflag,
‘IPO‘
);
end IF;
if a3!=0 THEN
SELECT ‘更新数据‘;
UPDATE bl_b_companyevent SET
code=f_code,
sshy2=f_sshy2,
ssqy2=f_ssqy2,
lxdh=f_lxdh,
lxcz=f_lxcz,
zcdz=f_zcd,
fddbr=f_fddbr,
qsjg=f_qsjg,
qsjgmc=f_qsjg,
qsjbrmc=f_qsjgdbr,
lsswsmc=f_lssws,
lsjbrmc=f_qzlv,
kjsswsmc=f_kjssws,
kjsswsjbrmc=f_qzkjs,
gsjj=f_brief,
uptr=pd_uptr,
upttime=NOW(),
eventstatus=‘02‘,
eventstatus2=‘审核中‘
WHERE name=f_name;

end if;

end IF;

END if;

FETCH cur_1 INTO f_name,
f_shortname,
f_logo,
f_qyxz2,
f_sshy2,
f_ssqy2,
f_lxdh,
f_lxcz,
f_zcd,
f_fddbr,
f_qsjg,
f_qsjgdbr,
f_lssws,
f_qzlv,
f_kjssws,
f_qzkjs,
f_brief,f_delflag,f_eventdata,f_code; /*取下一条记录*/

end while;

close cur_1;
END

时间: 2024-12-08 20:12:04

mysql存储过程(查询数据库 游标循环 if判断 插入别的数据库)的相关文章

Sql server存储过程中常见游标循环用法

原文:Sql server存储过程中常见游标循环用法 用游标,和WHILE可以遍历您的查询中的每一条记录并将要求的字段传给变量进行相应的处理 DECLARE @A1 VARCHAR(10), @A2 VARCHAR(10), @A3 INT DECLARE YOUCURNAME CURSOR FOR SELECT A1,A2,A3 FROM YOUTABLENAME OPEN YOUCURNAME fetch next from youcurname into @a1,@a2,@a3 while

杏彩平台出租mysql存储过程之遍历多表记录后插入第三方表中

自从学过存储过程后杏彩平台出租(www.1159880099.com )QQ1159880099,就再也没有碰过存储过程,这是毕业后写的第一个存储过程. 因为项目里设备的种类比较多,分别存在不同的数据表中,java中对应不同的java bean对象,想要统一管理有点困难.最近正好要开发一个功能模块,就是需要统一对设备进行处理,想着为了以后都能方便的统一处理各种设备,就从现在开始设计一套方案管理起这些项目吧. 如何统一管理呢? 如果从项目一开始设计的时候就能考虑到项目会发展成今天这样,当初就应该抽

mysql 存储过程中使用游标中使用临时表可以替代数组效果

mysql不支持数组.但有时候需要组合几张表的数据,在存储过程中,经过比较复杂的运算获取结果直接输出给调用方,比如符合条件的几张表的某些字段的组合计算,mysql临时表可以解决这个问题.临时表:只有在当前连接情况下, TEMPORARY 表才是可见的.当连接关闭时, TEMPORARY 表被自动取消.必须拥有 create temporary table 权限,才能创建临时表.可以通过指定 engine = memory; 来指定创建内存临时表. 先建立要用的数据表及数据: drop table

Mysql存储过程查询结果赋值到变量的方法

把查询结果赋值到变量,大部分情况下使用游标来完成,但是如果明确知道查询结果只有一行(例如统计记录的数量,某个字段求和等),其实可以使用set或into的方式来实现赋值.示例代码: drop table if exists test_tbl; create table test_tbl (name varchar(20), status int(2)); insert into test_tbl values('abc', 1),('edf', 2),('xyz', 3); drop proced

Mysql存储过程查询数据插入别的表里。

DELIMITER// CREATE PROCEDURE setRoomManger2() BEGIN DECLARE roomids VARCHAR(32); DECLARE done INT DEFAULT 0; DECLARE cur CURSOR FOR SELECT roomid FROM nst_t_room; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; OPEN cur; FETCH NEXT FROM c

mysql把查询到不一样的记录插入到另一张表中

我们将一个表中的数据插入到另一个表中的时候可以这么写: INSERT INTO 目标表 (字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM 来源表 WHERE not exists (select * from 目标表 where 目标表.比较字段 = 来源表.比较字段);

第12章 mysql 存储过程

2015-10-24 目录 参考资料 [1] 唐汉明.深入浅出MySQL 数据库开发.优化与管理维护(第2版)[M].北京:人民邮电出版社,2014 [2] Schwartz.高性能MySQL(第3版)[M].北京:电子工业出版社,2013 [3] 范德兰斯.MySQL开发者SQL权威指南 [M].北京:机械工业出版社,2008 [4] Forta.MySQL必知必会 [M].北京:人民邮电出版社,2009 [5] Chapter 20 Stored Programs and Views [6]

MySQL存储过程入门教程

存储过程介绍 存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程可由应用程序通过一个调用来执行,而且允许用户声明变量 .同时,存储过程可以接收和输出参数.返回执行存储过程的状态值,也可以嵌套调用. 存储过程和函数的区别 函数往往作为公式使用,存储过程作为完成某种功能使用. 函数分为表值函数跟标量函数.表值函数是经过一些sql语句方法最后返回一张表,标量函数是经过一些sql语句方法最后返回一个值.

mysql 存储过程 动态表名

今天写存储过程时,遇到要将表名最为参数的问题,如果不涉及到游标的话,使用prepare可以解决问题,但是,动态表名要运用在游标中的话,则prepare就得靠边站了. 集众人之智慧,最后,使用临时表解决了问题. 如何在MySQL的存储过程中实现把过程参数用在游标定义的SELECT命令里面作为表名引用 首先,我们来把场景描绘一下,比如下面的例子(当然是无法正确运行的):   CREATE PROCEDURE `proc`(SourceDBName CHAR(50), SourceTableName