|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
先说DDL的分类。有一类DDL,是不需要重建表的,比如加非聚簇索引。这类操作其实不会丢数据,也是在原表上直接操作,对于我们“以恢复数据为目的”的闪回,是可以先忽略的。另外一类,则是会影响到表数据的操作。语句
在我们的数据库中,有些字段其值是按位暗示的,即分歧的位有分歧的寄义,好比用分歧的位代表用户的分歧权限或属性,该位为1时,暗示用户有此权限或属性,为0则无此权限或属性等。信任有良多数据库为了效力也有相似的计划。
在C言语中供应了&,|,~和>>,<<等丰厚的位操纵符,怎样经由过程SQL语句完成对值的相似操纵呢?上面给出我们经常使用的两个函数(个中实行&操纵的函数不是吹的,比Oracle供应的BITAND函数好用,Oracle的函数在操纵数较年夜时会堕落),假如人人有相似的需求,只需参照其计划办法,能够很简单完成。
1.func_bitoper
我们在事情中经常有如许的需求,请求将某个字段的某一名或多地位为1或0,输出参数in_value是待处置的值,enable_mask暗示要将哪几地位为1,如要将bit0和bit2置为1,则enable_mask:=POWER(2,0)+POWER(2,2);,enable_mask为0暗示没有必要置为1的位,同理disable_mask暗示要将哪几地位为0,如要将bit1和bit3置为0,则disable_mask:=POWER(2,1)+POWER(2,3);,disable_mask为0暗示没有必要置为0的位,前往值为经由位操纵后的值。
换句话说,enable举措相称于与enable_mask举行或操纵,disable举措相称于与~disable_mask举行与操纵。
createorreplacefunctionfunc_bitoper(in_valueINNUMBER,enable_maskINNUMBER,
disable_maskINNUMBER)returnNUMBERIS
l_enablenumber;
l_disablenumber;
inumber;
jnumber;
l_outvaluenumber;
l_tempnumber;
begin
l_enable:=enable_mask;
l_disable:=disable_mask;
l_outvalue:=in_value;
--enable
j:=0;
whilel_enable>0loop
ifMOD(l_enable,2)=1then--todosetwork
l_temp:=TRUNC(l_outvalue/POWER(2,j));
ifMOD(l_temp,2)=0then--setitto1
l_outvalue:=l_outvalue+POWER(2,j);
endif;
endif;
l_enable:=TRUNC(l_enable/2);
j:=j+1;
endloop;
--disable
j:=0;
whilel_disable>0loop
ifMOD(l_disable,2)=1then--todosetwork
l_temp:=TRUNC(l_outvalue/POWER(2,j));
ifMOD(l_temp,2)=1then--setitto0
l_outvalue:=l_outvalue-POWER(2,j);
endif;
endif;
l_disable:=TRUNC(l_disable/2);
j:=j+1;
endloop;
returnl_outvalue;
end;
/
2.func_and
用于对两个数举行与操纵,常常用于判别用户是不是有权限等。
createorreplacefunctionfunc_and(in_valueINNUMBER,in_maskINNUMBER)
returnnumberis
inumber;
n_resultnumber;
n_valuenumber;
n_masknumber;
begin
n_value:=in_value;
n_mask:=in_mask;
i:=0;
n_result:=n_value;
whilen_value>0loop
if(mod(n_mask,2)=0)and(mod(n_value,2)=1)then
n_result:=n_result-power(2,i);
endif;
n_value:=TRUNC(n_value/2);
n_mask:=TRUNC(n_mask/2);
i:=i+1;
endloop;
returnn_result;
end;
/
好履历愿与人人共享,但愿起到举一反三的感化。
修复过程包含最多4个阶段,在下面描述。在你开始前,你应该cd到数据库目录和检查表文件的权限,确保他们可被运行mysqld的Unix用户读取(和你,因为你需要存取你正在检查的文件)。如果它拒绝你修改文件,他们也必须是可被你写入的。 |
|