Oracle MySQL動(dòng)態(tài)表的實(shí)際解決方案
下面的文章主要講述的是Oracle MySQL動(dòng)態(tài)表的實(shí)際解決辦法,我們大家都知道,CRM需要定期將相關(guān)的數(shù)據(jù)導(dǎo)回到其CRM數(shù)據(jù)庫(kù)(目的DB:Oracle;源DB:MySQL);但是因?yàn)槟壳霸鲩L(zhǎng)量不太大,,,而今后會(huì)比較大.由于Oracle MySQL數(shù)據(jù)庫(kù)不是我建的。
還是決定登上去看一下,主表沒(méi)有一個(gè)字段可以***標(biāo)識(shí)一比記錄的,也就是說(shuō)我目前只會(huì)面臨.我導(dǎo)數(shù)據(jù)的同時(shí)有新的數(shù)據(jù)錄入,明顯會(huì)出問(wèn)題.程序員又不在,,,之前一直都只管Oracle,馬上要讓玩MySQL,看來(lái)只得現(xiàn)學(xué)現(xiàn)用了,現(xiàn)寫(xiě)一個(gè)Oracle MySQL的存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn).讓系統(tǒng)每天產(chǎn)生后一天的表放在那里,系統(tǒng)根據(jù)時(shí)間的不同,將數(shù)據(jù)插入不同的表中,以下為實(shí)施腳本:
MySQL存儲(chǔ)過(guò)程事例:
- declare @t_date varchar(20);
 - set @t_date = '(select concat('readinfo',curdate()+0))';
 - mysql>delimiter &&
 
臨時(shí)結(jié)束符
- mysql>create procedure p()
 - ->begin
 - ->select * from pet;
 - ->end;&&
 - mysql>delimiter ;
 - mysql> call p();
 
自寫(xiě)Oracle MySQL存儲(chǔ)過(guò)程:
- CREATE TABLE readinfo20070726 (
 - eid int(11) ,
 - guid varchar(36) ,
 - ip varchar(20) ,
 - date varchar(20),
 - bookname varchar(60) ,
 - version int(11) ,
 - isvip int(11) ,
 - vipname varchar(80)
 - ) ENGINE=MyISAM DEFAULT CHARSET=utf8
 - CREATE TABLE readinfo20070727 (
 - eid int(11) ,
 - guid varchar(36) ,
 - ip varchar(20) ,
 - date varchar(20),
 - bookname varchar(60) ,
 - version int(11) ,
 - isvip int(11) ,
 - vipname varchar(80)
 - ) ENGINE=MyISAM DEFAULT CHARSET=utf8
 - CREATE TABLE readinfo20070728 (
 - eid int(11) ,
 - guid varchar(36) ,
 - ip varchar(20) ,
 - date varchar(20),
 - bookname varchar(60) ,
 - version int(11) ,
 - isvip int(11) ,
 - vipname varchar(80)
 - ) ENGINE=MyISAM DEFAULT CHARSET=utf8
 
存儲(chǔ)過(guò)程:
- CREATE PROCEDURE sp_readinfo(in eid int,in guid varchar(36),in ip varchar(50))
 - NOT DETERMINISTIC
 - SQL SECURITY DEFINER
 - COMMENT ''
 - BEGIN
 - set @table = concat('readinfo',curdate()+0);
 - set @temp1 = 'insert into ';
 - 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);
 - prepare stmt from @sql_text;
 - execute stmt;
 - end;
 
這么做,,,對(duì)性能肯定會(huì)有影響,也只是暫時(shí)的,,,
附:
MYSQL存儲(chǔ)過(guò)程使用動(dòng)態(tài)SQL 建多表
例一:循環(huán)建立字段相同滴多表 表名如: k1k k2k k3k ........
- mysql> delimiter //
 - mysql> create procedure ppp (in i int)
 - -> begin
 - -> declare k int;
 - -> set k=1;
 - -> while k<i do
 - -> set @t=k;
 - -> set @tname=concat('k',@t,'k');
 - -> set @dwhe='(id int,name varchar(255))';
 - -> set @sql_text:=concat('create table ',@tname,@dwhe);
 - -> prepare stmt from @sql_text;
 - -> execute stmt;
 - -> set kk=k+1;
 - -> end while;
 - -> end;
 - -> //
 - Query OK, 0 rows affected (0.00 sec)
 - mysql> call ppp(6)//
 - Query OK, 0 rows affected (0.86 sec)
 
例二:參數(shù)做為表名 查詢
- mysql> create procedure pp (tname varchar(255))
 - -> begin
 - -> set @na=tname;
 - -> set @sql_text:='select count(*) from ';
 - -> set @sql_text:=concat(@sql_text,@na);
 - -> prepare stmt from @sql_text;
 - -> execute stmt;
 - -> end;
 
上述的相關(guān)內(nèi)容就是對(duì)Oracle MySQL動(dòng)態(tài)表解決辦法的描述,希望會(huì)給你帶來(lái)一些幫助在此方面。
【編輯推薦】















 
 
 
 
 
 
 