1818IP-服务器技术教程,云服务器评测推荐,服务器系统排错处理,环境搭建,攻击防护等

当前位置:首页 - 数据库 - 正文

君子好学,自强不息!

下面的文章主要讲述的是Oracle MySQL动态表的实际解决办法,我们大家都知道,CRM需要定期将相关的数据导回到其CRM数据库(目的DB:Oracle;源DB:MySQL);但是因为目前增长量不太大,,,而今后会比较大.由于Oracle MySQL数据库不是我建的。

还是决定登上去看一下,主表没有一个字段可以***标识一比记录的,也就是说我目前只会面临.我导数据的同时有新的数据录入,明显会出问题.程序员又不在,,,之前一直都只管Oracle,马上要让玩MySQL,看来只得现学现用了,现写一个Oracle MySQL的存储过程来实现.让系统每天产生后一天的表放在那里,系统根据时间的不同,将数据插入不同的表中,以下为实施脚本:

MySQL存储过程事例:

declare@t_datevarchar(20); 
set@t_date='(selectconcat('readinfo',curdate()+0))'; 
mysql>delimiter&&

临时结束符

mysql>createprocedurep() 
->begin 
->select*frompet; 
->end;&& 
mysql>delimiter; 
mysql>callp();

自写Oracle MySQL存储过程:

CREATETABLEreadinfo20070726( 
eidint(11), 
guidvarchar(36), 
ipvarchar(20), 
datevarchar(20), 
booknamevarchar(60), 
versionint(11), 
isvipint(11), 
vipnamevarchar(80) 
)ENGINE=MyISAMDEFAULTCHARSET=utf8 
CREATETABLEreadinfo20070727( 
eidint(11), 
guidvarchar(36), 
ipvarchar(20), 
datevarchar(20), 
booknamevarchar(60), 
versionint(11), 
isvipint(11), 
vipnamevarchar(80) 
)ENGINE=MyISAMDEFAULTCHARSET=utf8 
CREATETABLEreadinfo20070728( 
eidint(11), 
guidvarchar(36), 
ipvarchar(20), 
datevarchar(20), 
booknamevarchar(60), 
versionint(11), 
isvipint(11), 
vipnamevarchar(80) 
)ENGINE=MyISAMDEFAULTCHARSET=utf8

存储过程:

CREATEPROCEDUREsp_readinfo(ineidint,inguidvarchar(36),inipvarchar(50)) 
NOTDETERMINISTIC 
SQLSECURITYDEFINER 
COMMENT'' 
BEGIN 
set@table=concat('readinfo',curdate()+0); 
set@temp1='insertinto'; 
set@temp2='(eid,guid,ip,date)values('; 
set@value1=eid; 
set@value2=guid; 
set@value3=ip; 
set@value4='now())'; 
set@sql_text:=concat(@temp1,@table,@temp2,@value1,',',@value2,',',@value3,',',@value4); 
preparestmtfrom@sql_text; 
executestmt; 
end;

这么做,,,对性能肯定会有影响,也只是暂时的,,,

附:

MYSQL存储过程使用动态SQL 建多表

例一:循环建立字段相同滴多表 表名如: k1k k2k k3k ……..

mysql>delimiter// 
mysql>createprocedureppp(iniint) 
->begin 
->declarekint; 
->setk=1; 
->whilek<ido 
->set@t=k; 
->set@tname=concat('k',@t,'k'); 
->set@dwhe='(idint,namevarchar(255))'; 
->set@sql_text:=concat('createtable',@tname,@dwhe); 
->preparestmtfrom@sql_text; 
->executestmt; 
->setkk=k+1; 
->endwhile; 
->end; 
->// 
QueryOK,0rowsaffected(0.00sec) 
mysql>callppp(6)// 
QueryOK,0rowsaffected(0.86sec)

例二:参数做为表名 查询

mysql>createprocedurepp(tnamevarchar(255)) 
->begin 
->set@na=tname; 
->set@sql_text:='selectcount(*)from'; 
->set@sql_text:=concat(@sql_text,@na); 
->preparestmtfrom@sql_text; 
->executestmt; 
->end;

本文来源:1818IP

本文地址:https://www.1818ip.com/post/11172.html

免责声明:本文由用户上传,如有侵权请联系删除!

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。