逍遥一派 发表于 2015-1-16 22:27:07

MSSQL网页设计使用SQL语句完成位操纵

先说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用户读取(和你,因为你需要存取你正在检查的文件)。如果它拒绝你修改文件,他们也必须是可被你写入的。

再现理想 发表于 2015-1-19 12:57:29

入门没那么困难,精通没那么容易

再见西城 发表于 2015-1-25 10:18:44

大侠们有推荐的书籍和学习方法写下吧。

山那边是海 发表于 2015-2-2 21:38:57

需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。

若天明 发表于 2015-2-8 06:58:18

而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。

老尸 发表于 2015-2-24 22:02:13

我们学到了什么?思考问题的时候从表的角度来思考问

简单生活 发表于 2015-3-7 13:49:30

学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!

爱飞 发表于 2015-3-15 07:23:35

索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。

冷月葬花魂 发表于 2015-3-21 20:45:35

大侠们有推荐的书籍和学习方法写下吧。
页: [1]
查看完整版本: MSSQL网页设计使用SQL语句完成位操纵