|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
因此我们的方案中要构造这种逆操作。Event_type增加一种FlashBACK_EVENT。这类操作形式与Query_Event相同,都是简单的SQL语句,只是包含了将数据恢复的操作。
这些天忙着做卒业计划,忙着敲代码,早发明像本来那样“无聊”的把那些手艺笔墨再敲一遍是没有多粗心义的,由于写出它们所用的工夫如果细心在看大概再用代码做几个实践的例子应当更好吧,实在这是早晓得的,那之前晓得还那末干,次要是由于太想做先生了吧!如今呢,不那末干不写了是由于临时保持做先生的盘算吧,这两天余暇的时分温习数据库,翻到了之前的所写的一个存储历程“主键天生器”,SQLServer版本的是在之前项目顶用过的,Oracle版本的是前面进修Oracle时补上的,不论怎样,有看了一遍,敲了一遍,未来面视的时分大概用得着吧。
SQLServer版
USETEST
IFEXISTS(SELECTnameFROMsysobjects--反省体系中是不是有与自界说存储历程同名的工具
WHEREname=getNoANDtype=P)
DROPPROCEDUREgetNo
GO
CREATEPROCEDUREgetNo
@precRecordvarchar(10),--3个参数。第1个为输出参数(表名);第3个为输出
--参数(用以判别输入格局);;第2个为输入参数(最初天生的主键编号)
@primarykeyvarchar(12)output,--若第3个参数即是0时,主键=字轨+时代+编号
--若第3个参数即是1时,主键=字轨+编号
@signsmallint--若第3个参数即是其他时报错
AS
declare@prctmpdatedatetime,--一时变量,用以纪录存储过程当中的两头变量
@todaydatetime,
@tmpprenumvarchar(4),
@tmpwordvarchar(2),
@year1varchar(2),
@day1varchar(2),
@month1varchar(2)------------------------------------------------------------------------------------------------------------
set@today=getdate()
ifnotexists(selectfRecordfromtbrecnowherefRecord=@precRecord)--若表中没有与参数1同名的则新拔出一条
begin
insertintotbrecno(fRecord,Predate,Prenum,Word)values(@precRecord,@today,1,left(@precRecord,2))
end
else
begin
select@prctmpdate=PredatefromtbrecnowherefRecord=@precRecord
if(datediff(day,@today,@prctmpdate)<0)--对照若以后日期<前次日期,令
--前次日期=前次日期且前次编号置为零
begin
updatetbrecnosetPrenum=1,predate=@todaywherefRecord=@precRecord
end
elseif(datediff(day,@today,@prctmpdate)=0)--若以后日期=前次日期,令前次编号加一
begin
updatetbrecnosetPrenum=Prenum+1wherefRecord=@precRecord
end
elseif(datediff(day,@today,@prctmpdate)>0)--若以后日期〈前次日期,报错
begin
raiserror(thedbserverdateerreorchecksystemdateplease!,16,1)
end
end
---------------------------------------------------------------------------------------------------------------
select@prctmpdate=Predate,@tmpword=Word,@tmpprenum=prenumfromtbrecnowherefRecord=@precRecord
select@tmpprenum=--前次编号不敷四位的补够四位
caselen(ltrim(rtrim(@tmpprenum)))
when1then000+rtrim(ltrim(@tmpprenum))
when2then00+rtrim(ltrim(@tmpprenum))
when3then0+rtrim(ltrim(@tmpprenum))
when4thenrtrim(ltrim(@tmpprenum))
end
-----------------------------------------------------------------------------------------------------------------
set@year1=right(ltrim(rtrim((str(year(@prctmpdate))))),2)--掏出年份
select@month1=
caselen(ltrim(str(month(@prctmpdate))))--掏出月份,若不敷两位的补够两位
when1then0+ltrim(str(month(@prctmpdate)))
when2thenltrim(str(month(@prctmpdate)))
end
select@day1=--掏出天数,若不敷两位的补够两位
caselen(ltrim(str(day(@prctmpdate))))
when1then0+ltrim(str(day(@prctmpdate)))
when2thenltrim(str(day(@prctmpdate)))
end
----------------------------------------------------------------------------------------------------------------
if@sign=1
begin--判别输入范例
set@primarykey=rtrim(ltrim(@tmpword))+@tmpprenum
end
elseif@sign=0
begin
set@primarykey=@tmpword+@year1+@month1+@day1+@tmpprenum
end
else
begin
raiserror(parametererror,16,1)
end
--------------------------------------------------------------------------
GO
-------------------------------------------------------------------
--测试
declare@mybillnovarchar(12)
execgetNopG,@mybillnooutput,0
select@mybillno
--IFEXISTS(select*fromTbrecnowhereword=left(ltrim(rtrim(@precRecord)),2))
--raiserror(表名的前两个字母与已有的产生抵触请修正表名,16,1)
--deletetbrecno
--
--select*fromtbrecno
Oracle版
createorreplaceproceduregetmykeyno(
signvarchar2,
tablenamevarchar2,
outkeyoutvarchar2
)
is
--signgetmykey.my_ziguei%type;
--tablenamegetmykey.my_tablename%type;
--outkeyvarchar(20);
lastdategetmykey.my_lastdate%type;
tmpintgetmykey.my_lastno%type;
nowdatedate;
tmpStrvarchar(4);
tmpsignvarchar(2);
myyearint;
mymonthint;
mydayint;
tmpcountint;
begin
myyear:=extract(yearfromsysdate);
mymonth:=extract(monthfromsysdate);
myday:=extract(dayfromsysdate);
nowdate:=sysdate;
--tablename:=aaaa;
--sign:=ad;
selectcount(*)intotmpcountfromgetmykeywheremy_tablename=tablename;
iftmpcount=0then
begin
insertintogetmyke(my_tablename,my_ziguei,my_lastno,my_lastdate)values(tablename,sign,1,nowdate);tmpInt:=1;
end;
else
selectmy_lastdateintolastdatefromgetmykeywheremy_tablename=tablename;
if(myyear>=extract(yearfromlastdate)andmymonth>=extract(monthfromlastdate))then
if(myday=extract(dayfromlastdate))then
updategetmykeysetmy_lastno=my_lastno+1wheremy_tablename=tablename;
selectmy_lastnointotmpintfromgetmykeywheremy_tablename=tablename;
else
if(myday>extract(dayfromlastdate))then
updategetmykeysetmy_lastno=1wheremy_tablename=tablename;
updategetmykeysetmy_lastdate=nowdatewheremy_tablename=tablename;
tmpInt:=1;
else
dbms_output.put_line(服务器的工夫改动,请反省体系!);
endif;
endif;
endif;
endif;
tmpStr:=lpad(to_char(tmpint),4,0);
--dbms_output.put_line(tmpstr);
outkey:=substr(to_char(myyear),3,2)||lpad(to_char(mymonth),2,0)||lpad(to_char(myday),2,0)||tmpStr;
selectmy_zigueiintotmpsignfromgetmykeywheremy_tablename=tablename;
outkey:=tmpsign||outkey;
--dbms_output.put_line(outkey);
end;
导致了一个使用几乎和mSQL一样的API接口的用于他们的数据库的新的SQL接口的产生,这样,这个API被设计成允许为用于mSQL而写的第三方代码更容易移植到MySQL。 |
|