没有必胜的秘籍,没有方程式遵循~~ 要赢~~只有全身心的投入!

晶晶小妹实验二十 hash算法在字符串搜索中的另类使用

上一篇 / 下一篇  2008-03-18 01:38:36 / 个人分类:晶晶oracle实验系列

查看( 440 ) / 评论( 33 )
看到一网友的问题,如下:ITPUB个人空间4Yr$YlD)f2?
ITPUB个人空间m,R0c"^ucCY
表t1中有两个字段NO(NUMBER类型),ST(VARCHAR2类型)
.B t#TuD4k*N%H\0 表中有如下值ITPUB个人空间%y.Y$dO AhA p [
NO           ST
:dQt1q%Q)NRfz0 1        'A1A3BCLKMBNK'
5?Ql3bc"wk0 2        'A2A4MBKLDMSK'
tG.Q*Qv`9@%WO%h0 ITPUB个人空间q4i{(t9q4x*M4HP[
注:ST字段中的值长度都是2的整数倍;ITPUB个人空间b.S V(}'w MwJ

!j9^jKw0 ITPUB个人空间 ^ izU-F%P ?b
有一变量V_E,变量值为'A3MLLKNKDS'
4fD [8sv'aW0
f M0vO`r0 现在将t1表中的ST字符与变量V_E进行比较,比较的方法如下:
R^'V ?k z(Y J I#|7{0 V_E变量中每两个字符为一个基本单位,ST字段也是以两个字符为一个基本单位,让V_E与ST字段进行比较,得出ST中与V_E基本单位相同的数量
"AKs}H fv$\0u0
A'EQyO%vf0 即:ITPUB个人空间y&FM tJ Ek
t1表中的值可以看做ITPUB个人空间#P7k-Y g:}H
NO           ST
;~\ s_m#qA%a)^0
q HJ)A/ta W0 1        'A1  A3  BC  LK  MB  NK'ITPUB个人空间a}X_-}f
2        'A2  A4  MB  KL  DM  SK'
w.FC)seq0Gc&n|,x0 ---------------------------------------------
b zdm6r@t8VDZ0 变量V_E可以看做
pU-p9x.ai)K0 V_E  -->  'A3 ML LK NK DS'ITPUB个人空间 e%qY7L(T:}r
---------------------------------------------ITPUB个人空间 JD/dPx"Yr
ITPUB个人空间kR%J8E9ZOl"rLI
ITPUB个人空间_P"Q\KGI)^;G
比较之后得出:
H*_!i+a6w0 ITPUB个人空间-DS'p-`8]3i/k1j
NO           ST                         相同值     相同数量ITPUB个人空间*C4n ^ Z1W
1        'A1A3BCLKMBNK'      A3 LK NK        3
8s"W1Z5|(f/Fw0 2        'A2A4MBKLDMSK'                            0ITPUB个人空间7Vi(c JJ |
ITPUB个人空间{_u,x3AG;Be
使用递归或者循环匹配方式效率太低,希望各路高人能有更好的方法ITPUB个人空间E_,mJu&~gQ \4B

8A*J uEMr0 -------------完--------------------ITPUB个人空间y*{0nD,u+d/N
ITPUB个人空间4H0n1e"D#r0f&@u4G
根据网友的要求,使用循环进行匹配的效率的确不高,如果使用HASH算法,效率应该不错。ITPUB个人空间G~;un6[^)D
下面设计一个例子,请大家讨论:ITPUB个人空间d7L L;um\mLY

s0O6dA{\;RH0 因为每两个字符为一基本单位,而ASCII码最多也只有256个,因此,以第每个ASCII的数字值为HASH值,设定两个HASH表,如,V_E的HASH表状态为:
*^I)^0}"v7u0
+zF!o3`ZT+K0 HASH1[65]='1'  HASH2[51]='1'
*C:Q8s8[;s8nH#v0 HASH1[77]='1'  HASH2[76]='1'ITPUB个人空间Xu,L%cL;K'j
HASH1[76]='1'  HASH2[75]='1'ITPUB个人空间C7w]h~)f5R&V
HASH1[78]='1'  HASH2[75]='1'
)y Pxb] Pi0r0 HASH1[68]='1'  HASH2[83]='1'ITPUB个人空间S&^%j:f/g^p#J(I
ITPUB个人空间CMF/dPj
HASH1和HASH2分别是包含256个元素的数组,当做HASH表使用,上面所赋的值可以是任意字符,其余的值可以定为和它不同的其他字符。
,y4gm:RD~r#n e0
u/{v,vT{-cB0
:?-i)Xb*U[ b0 现在开始搜索第1行'A1  A3  BC  LK  MB  NK', A 1的ASCII码分别为65、49,只需比较HASH1[65]和HASH[49]的值是否为1,即可判断A1是否包含在V_E中。
N}!G,Z0x6T;pO%Y+UI4K0
A$sY s9|6_0 使用这种算法,ITPUB个人空间J _n8r#e'y"}E k7C
为HASH表赋初值:单循环,256次,只需在程序开始时执行一次
-O;^*T*|-r1{#js0 向HASH表填入V_E信息:单循环,循环次数随V_E长度而定
/J0i9B+USbf!{0 在表的某一行ST列中搜索字符串:单循环,循环次数随ST列长度而定
2e|,qh}0i#F9G%_0 在HASH表中抺去V_E信息:单循环,循环次数随V_E长度而定(我的例子中没包括此段)ITPUB个人空间,l;l W0|1]+D
ITPUB个人空间+@)xa O[-a"B/s a
本来为N*M的双重循环,变为了三个单循环,在算法上简单了许多。例子程序如下:ITPUB个人空间Q%Y4^2q}P
ITPUB个人空间GR FIRb%G8l"f
建立测试表:ITPUB个人空间4HH?}%Vh
create table itpub1(no number, st varchar(200));ITPUB个人空间_R!] y+cN;l+T
insert into itpub1 values(1,'A1A3BCLKMBNK');
tK{ p_e0 insert into itpub1 values(2,'LKMBNKA1A3BC');
_G)QoY*pTL~0 insert into itpub1 values(3,'A2A4MBKLDMSK');
N j~in$])w1F0 commit;ITPUB个人空间gY.k/q~8|4c

o!@.I3kU x R0 程序如下:
H_(w%D,B;v,a{lu0 declareITPUB个人空间\1T ON~Hp7?
   type marray is table of varchar2(200) index by binary_integer;
7b#du2gt_9j0    hash1 marray;
"FT;s0P7f(u/e,d [t0    hash2 marray;
"e[3}F7p6|0    v_e varchar2(200);
(].K^u,T j%^0    cursor it1 is select * from itpub1;ITPUB个人空间8Iv |&W"M
   v_e_len number(5);
o0E z/s;X;qfO.P0    st_len number(5);
&{1M(zr|"l)P0    j number(5):=1;
'B#P k1?3qD0 beginITPUB个人空间-Rd,A w)?[l#Ds(k
---------为HASH表赋初值----------
z]%Zd-vm5c0    for i in 1..256 loopITPUB个人空间,lxgT-B,n8[ x
     hash1(i):=chr(7);
9y`+X/c'ir(Z0      hash2(i):=chr(7);
n F:G'UC!a0    end loop;
Qr@z3\:m0 ----------结束----------
*l }%QyW!SZ4s0
J*x(h"h4V5ab]"v0    v_e:='A3MLLKNKDS';
%?^"T7pM%m r?M0    v_e_len:=length(v_e);
,G0k.qs4P0
q\:u ipZ0 -------向HASH表中填入v_e的信息--------ITPUB个人空间5qiHr)`(X;rP
   while j<=v_e_len loop
6at|j8?v Z0       hash1(ascii(substr(v_e,j,1))):='1';
8gA%d|(eY0       hash2(ascii(substr(v_e,j+1,1))):='1';
TV2C\v h0       j:=j+2;ITPUB个人空间\:S+Nw,Gx5\C&\
   end loop;
7f.\H(Rv%{0 -------结束--------ITPUB个人空间Kp6Bp2WF t

gK-b(r5jD0    for cur in it1 loopITPUB个人空间R_@~r3U&|Oy
     dbms_output.put(rpad(cur.no,5,' ')||rpad(cur.st,40,' '));
m M7g+] w r0      j:=1;
B6@;FNt0      st_len:=length(cur.st);
;W.zz5vn\0
+u E:jU.Av*J9b0 -------根据HASH表进行匹配--------ITPUB个人空间6P?#\BI
     while j<=st_len loopITPUB个人空间c8S+tO'MVQ X.|
        if hash1(ascii(substr(cur.st,j,1)))='1' and hash2(ascii(substr(cur.st,j+1,1)))='1' then
,K)~ Z0rf{\!m0            dbms_output.put(substr(cur.st,j,2)||' ');ITPUB个人空间.s0wWv6|
        end if;ITPUB个人空间hjXj8_ ^/KnL
        j:=j+2;ITPUB个人空间R&p.g'T)sFg
     end loop;ITPUB个人空间'd0u"W&a/`iA:W
-------结束--------
&t.OGw(T6tcG0 ITPUB个人空间 Kq+O5b~[ D%h;|i
     dbms_output.put_line(' ');ITPUB个人空间TRH8tNnmq C/o
   end loop;
} qp~ T\&q-XD7O4K0 end;ITPUB个人空间-Cf,e|_)`)o6I
/ITPUB个人空间qN6s(CRn#F Q
ITPUB个人空间1h2Xwqb0FLC
以下是执行结果:ITPUB个人空间pJN'N%S*C"v~Xt
sid=14 pid=12> @itpub1
'bwif8D8G7f0 1    A1A3BCLKMBNK                            A3 LK NK
%T$x4m0a3w[:L-g2B0 1    LKMBNKA1A3BC                            LK NK A3ITPUB个人空间%c lC6@_6Y4[~
3    A2A4MBKLDMSK

TAG:

netbanker的个人空间 netbanker 发布于2008-03-18 04:44:04
sofa
cyt2005发布于2008-03-18 09:15:10
很执着很勤奋哈~
蝈蝈的个人空间 fly_bug 发布于2008-03-18 09:25:24
小妹,oracle在data buffer cache中查找数据块也是使用hash算法,那么具体是以什么做为HASH值?
Alienovo的个人空间 Alienovo 发布于2008-03-18 09:27:14
每早都能看到晶晶的文章
haorman zuohao_lu 发布于2008-03-18 09:30:09
晶晶强人.
'~$h!L%fAspace.itpub.net支持.
晶晶小妹的个人空间 晶晶小妹 发布于2008-03-18 09:30:23

QUOTE:

原帖由 fly_bug 于 2008-3-18 09:25 发表 x7X q        I1q.n
小妹,oracle在data buffer cache中查找数据块也是使用hash算法,那么具体是以什么做为HASH值?
E~i/B8f$g U Mspace.itpub.net
#~~+@0T-E'x'R&\TA是以块的文件号、块号(好像还有对象号)为基础,用Oracle的内部HASH函数,生成一个HASH值。
一亩三分西瓜地 BTxigua 发布于2008-03-18 09:37:00

QUOTE:

原帖由 netbanker 于 2008-3-18 04:44 发表
e(Q)xj1u#WuYQRsofa
"u2H
b ]        R)~I#loracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net
oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net8PfJ S&?;Je
D

2008-3-18 04:44
x+DNK2\oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net这个沙发代价还是蛮大的嘛
DBA 足迹 jimhou 发布于2008-03-18 09:47:40
好文
rollingpig的个人空间 rollingpig 发布于2008-03-18 09:52:05
有明显漏洞哦~~~
4c9`e+M)M/{oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net'A3MLLKNKDS'
q)kh[9c%P4e[LITPUB个人空间
'w#J!Kup.EvH [3mAL AK AS 都符合你的程序,却不符合要求哦
rollingpig的个人空间 rollingpig 发布于2008-03-18 09:54:48
修改两个地方,倒是可以实现
9_/a;?        ~6wspace.itpub.net-------向HASH表中填入v_e的信息--------
8?:bTy)F5Z/B+moracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net   while j<=v_e_len loop9{"cc;j*x;r4H
      hash1(ascii(substr(v_e,j,1))):=Chr(64+j);space.itpub.net
g"X*`]:m6L[c

      hash2(ascii(substr(v_e,j+1,1))):=Chr(64+j);
eO4{ K!z+e9ur^^      j:=j+2;ITPUB个人空间        i-oH6LI"]*E2EF;\
   end loop;ITPUB个人空间3MlQ9@&I&q2x4oE"|
e        r-c


D*__$O U-Weo)E(^
B5]
。。。。
9W)m Tp$OA({M
bJ
        if hash1(ascii(substr(cur.st,j,1)))!=Chr(7) AND   hash1(ascii(substr(cur.st,j,1))) =  hash2(ascii(substr(cur.st,j+1,1))) thenD`v1[h3z,v(IU
           dbms_output.put(substr(cur.st,j,2)||' ');
2aG        E$l7pWITPUB个人空间           NULL;
D
}-n        Ku%l
        end if;
louis_xu的个人空间 louis_xu 发布于2008-03-18 10:02:13
又是凌晨发的,小妹注意身体啊
五“宅”一生发布于2008-03-18 10:10:01
小妹发帖子的时候我刚睡觉。得向小妹学习。
晶晶小妹的个人空间 晶晶小妹 发布于2008-03-18 10:49:13

QUOTE:

原帖由 rollingpig 于 2008-3-18 09:52 发表 space.itpub.net`
m-ND'g!T

有明显漏洞哦~~~(zL9zZ:{#wi ln6F/i
'A3MLLKNKDS'space.itpub.net}[C,]p\z9l
ITPUB个人空间L0u'k8[ j)k3lk1Z0}
AL AK AS 都符合你的程序,却不符合要求哦
space.itpub.net.H7@W mA9Ul8l&f.[
ITPUB个人空间6RB9}7l"x,f#n*AK
ITPUB个人空间~d%z2e        c k_*ed
以下是执行结果:Bq9R$}4L.]M
sid=14 pid=12> @itpub16B
|)bXHc%N
K5{B)P

1    A1A3BCLKMBNK                            A3 LK NK
8X/?W%O6M1    LKMBNKA1A3BC                            LK NK A3 ~[:tz,]MFV~
3    A2A4MBKLDMSK
!H/f`+~ KIOqspace.itpub.net ]^w$PF!o
space.itpub.net/__6YVq
j#wQ+^

老大,执行结果里没有AL AK AS 吖?
晶晶小妹的个人空间 晶晶小妹 发布于2008-03-18 10:51:35

QUOTE:

原帖由 rollingpig 于 2008-3-18 09:54 发表
fE%i$[3MH'l
?.OoC
修改两个地方,倒是可以实现uc
}X+Wz@e u6]

-------向HASH表中填入v_e的信息--------
I@9T p H   while j
oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net"_E
T-hOu`)D

2Z+EX \*D@*Jj:f
f7qY)Jr3GU
 好象咱俩说的不一样.0j^
]4OHg
OGq

ITPUB个人空间'~1nHr i3i{
我的hash表只放一个标志,随便放一个值都行.只需要标志在这个桶处有字符或没有字符.
蒙昭良的个人空间 mengzhaoliang 发布于2008-03-18 12:50:59
晶晶太猛了,年轻有才,很受打击!
rollingpig的个人空间 rollingpig 发布于2008-03-18 13:02:54
insert into itpub1 values(999, 'ALAKAS')0w        TFj/g8[OuC
再运行一遍
adamyang的个人空间 adamyang 发布于2008-03-18 14:52:15
索引表支持字符串的KEY,可以简化一下:ITPUB个人空间.yZ OMW[

(CnF&WGxdeclare
RMY lBMr)v(wspace.itpub.net   type marray is table of binary_integer index by varchar2(200);
/mFa+e0R7i7p   v_index marray;
w m5T
I        p`+j+V `
   v_e varchar2(200);space.itpub.net"L]!M"~FK `2zE
   cursor it1 is select * from itpub1;
N*dJ;Y9y#DJ1|b0Q BITPUB个人空间   v_e_len int;oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net*bQ)T5Z'[o~%}
   st_len int;
*urB6ka8\a,\   j int default 1;oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net!a I5BdT,S8z0Qy
beginspace.itpub.netax4R8?G#[        d$i        g
   v_e:='A3MLLKNKDS';oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net;_X+x9MtT9^x(M
   v_e_len:=length(v_e);
|#J!~te*i
pO&y{^NNoracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net   while j<=v_e_len loopspace.itpub.net1QdH@L3o t
      v_index(substr(v_e,j,2)):=null;
5[ T6O]1T/m6fspace.itpub.net      j:=j+2;ITPUB个人空间,WBSy
[6w

   end loop;
GG3\-q5H
\

        i,e'q!e0R4]   for cur in it1 loopspace.itpub.netF        gFN(ix${
     dbms_output.put(rpad(cur.no,5,' ')||rpad(cur.st,40,' '));oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net*ZM0V{G6l7l
     j:=1;space.itpub.net#Cc'[4@(G&x+H] d
     st_len:=length(cur.st);9p_w({Ko]Rp:B
     while j<=st_len loop
Jv
rh xGDy'mspace.itpub.net
        if v_index.exists(substr(cur.st,j,2)) then
+z4y}{-e F3L           dbms_output.put(substr(cur.st,j,2)||' ');
U5GmvI$e8^!ospace.itpub.net        end if;
        EuLV:h        j:=j+2;4M*X?1Z&@&t v
m0a

     end loop;
+jq;{        _N2`
tw*Vn[X+P*H8B H
w?/T(B
     dbms_output.put_line(' ');Ee3G9[ [$G6q
_A0Z

   end loop;
T)l.|5D6`ikspace.itpub.netend;:oTR CA4O"s
/
陌生的彼岸 wghxwl12 发布于2008-03-18 15:01:25
首先佩服楼主的基本工
===========================================================================================ITPUB个人空间0?@'t K C\B
下面的直接处理的函数比较直观,但是可能顾及不了效率/Ku8\"q8Q$SC._?K
------------------------------------------------------------------------------------------------------------------------------------
&h@{$] N4V,Uz1VZCREATE OR REPLACE FUNCTION FUN_MATCH_CNT(P_STR VARCHAR2, P_STR2 VARCHAR2) RETURN VARCHAR2 IS
TS/g#q[ X p        r,Z'g    V_MOTHER VARCHAR2(200);
9z#X'{ UF:MOznITPUB个人空间    V_MATCH  VARCHAR2(20);oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.netT`+oOhL
    V_LENGTH NUMBER;0U%v0eph"N
    V_LENM   NUMBER :=2;oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net-]Y9K,o;Y
    V_NUM    NUMBER := 0;
M lB+we2~
q
]+x
    V_CNT    NUMBER ; space.itpub.netQ D ~5}0u
                V_MATCHSTR VARCHAR2(200):=' ';ITPUB个人空间+\'E/P7P3ktn
                V_MATECHED VARCHAR2(200):=' ';
6W%c*G|Dm_  BEGIN     
0E:_`#v;u@!VIITPUB个人空间          V_CNT  := 0;
2c;R/zqW    V_MOTHER := P_STR;ITPUB个人空间l5`%~ Y+v-ye
                --V_MATCH := P_STR2;oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.netN N}
    --将 V_MOTHER值改变成每两个字符被逗号隔开的值
r
? \{b{%Dspace.itpub.net
                V_LENGTH := LENGTH(REPLACE(P_STR,',','')) / 2;;Ne0[;{P4b        Wz
    V_LENM   := LENGTH(P_STR2) / 2;
q7W,I&_c|E
Q#yoracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net
                IF(INSTR(V_MOTHER,',')= 0 ) THEN      oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net hzq,Hyd
                        FOR X IN 1 .. (V_LENGTH - 1) LOOP,Q3S!\V?q4J%m
          V_MOTHER := SUBSTR(V_MOTHER, 1, (V_LENGTH - X) * 2) || ',' ||2x0l mId/j']
                  SUBSTR(V_MOTHER, (V_LENGTH - X) * 2 + 1);space.itpub.netd;F8z9l3B^
      END LOOP;
BU:_9^-tC2C_YITPUB个人空间                END IF;ITPUB个人空间(WH1b-W7i(m
    --DBMS_OUTPUT.PUT_LINE(V_MOTHER);ITPUB个人空间/T+CF3lW$_c'A
cD

    --针对每个基本单位进行比较$O oi+[`
    FOR Y IN 1 .. V_LENM LOOP      space.itpub.net4_%Z#M:do$e2l
                   V_MATCH := SUBSTR(P_STR2, Y * 2 - 1, 2);
D/c ?jz p$l*Uoracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net       SELECT SIGN(INSTR(V_MOTHER,V_MATCH ))
_7M]}}        INTO V_NUMITPUB个人空间g'u1k"b)Rf&xa
        FROM DUAL;space.itpub.netpVHSR6c
                                IF V_NUM = 1 THEN space.itpub.net}7`.J
JEyP.oK

                                      V_MATECHED := TRIM(V_MATECHED||V_MATCH);7Z(M O8t4P)S$`        Gq%m
                                      SELECT SUBSTR(V_MOTHER,1,INSTR(V_MOTHER, V_MATCH)-1)||SUBSTR(V_MOTHER,INSTR(V_MOTHER, V_MATCH)+3)
|&G s5XQv5Espace.itpub.net                                                        INTO V_MOTHER
us|;m/L [i~_.j-Sspace.itpub.net                                                        FROM DUAL;space.itpub.net
ue;^'Mol9ua:FX/P

              V_CNT := V_CNT + V_NUM; ITPUB个人空间I%GeOY!rA
                                                        --V_CNT := V_CNT + FUN_MATCH_CNT(V_MOTHER,V_MATCH);
\'U)a"Q1K(SAxf                                                        V_MATECHED := TRIM(V_MATECHED||NVL(FUN_MATCH_CNT(V_MOTHER,V_MATCH),' '));
&\%u%{e7pITPUB个人空间                          END IF;
?1PI*Hh    END LOOP;                 

W!m,n~m\"]y6N
    ---DBMS_OUTPUT.PUT_LINE(V_CNT);ITPUB个人空间3C        bZa%| S T
   -- RETURN V_CNT; 2C4Cms:Fk6]        j$Ju
         RETURN TRIM(V_MATECHED);
"BTV3v#r&a-~  END;
m'\o
o,q$nh6L*xITPUB个人空间

Gb0J"df        jU4q bbu!k'Q7J        SGbO
mkVGK6|
UP7K


eS+D R5Ow({:UwSELECT NO,ST ,fun_match_cnt(ST,'A3MLLKNKDS') AS 相同值,NVl(LENGTH(fun_match_cnt(ST,'A3MLLKNKDS')),0)/2 as 相同数量 FROM T1;ITPUB个人空间:B
GO,m.f

-------------------------------------------------------------------------------------------------------------------
fVN7s1P2LR8Voracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.netNO           ST                         相同值     相同数量
-U*oUx%N p1        'A1A3BCLKMBNK'      A3LKNK        3
y xU5[l

2        'A2A4MBKLDMSK'                          0
"| UY;V%t
I"Rh0r!uoracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net
.        ............................         ...              .
&K)L!y'`        `%Qspace.itpub.net.        ............................         ...              .
+|1j;a QdHn3|;p6oe)m"q,y
[ 本帖最后由 wghxwl12 于 2008-3-18 15:08 编辑 ]
陌生的彼岸 wghxwl12 发布于2008-03-18 15:04:09
小妹应该把该贴放到开发论坛或者专题深入讨论板块

晶晶小妹的个人空间 晶晶小妹 发布于2008-03-18 16:21:10

QUOTE:

原帖由 rollingpig 于 2008-3-18 13:02 发表 "ta@A7A3i3ma-zg&[
insert into itpub1 values(999, 'ALAKAS').Bc!L9`\4Z%k
再运行一遍
oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net3G[#rr$X*SS*]
0N @+x/Fj
6E*oRJ?kC,f@KD
Y@.?l8}(v

YS        a2u-XITPUB个人空间
,g!^t,N|soracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net
~)o
@fP}B7EUt
ITPUB个人空间T)yE#|.g$`"Li P
经过老大的修改果然OK!
feng_xin的个人空间 feng_xin 发布于2008-03-18 18:19:29
晶晶小妹真勤奋呀
louis5421发布于2008-03-18 20:17:35

QUOTE:

原帖由 adamyang 于 2008-3-18 14:52 发表 :i7f3j0J(n,A
索引表支持字符串的KEY,可以简化一下:
FDF"_;}`#_k blspace.itpub.net
6M ET`N#eITPUB个人空间declare
0MZ&o!t'N;d+q   type marray is table of binary_integer index by varchar2(200);
N2ecax%u6Q6Mn
jITPUB个人空间
   v_index marray;+d.h&bI RsD6M
   v_e varchar2(200);oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net@;c9e&xaM"s^+\ Q
   cursor it1 is select * from itpub1;
Rq
zW:dE
   v_e_len int;
B(@v
V ?
Zoracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net
   st_len int;#z&^%|KhS
   j int default 1;h u-xB|sJ/? h;AMn
begin
t8R @6u)}

   v_e:='A3MLLKNKDS';P,x&DN }i
   v_e_len:=length(v_e);
5pd,}ibxITPUB个人空间?
? Zv)Z

   while j
ITPUB个人空间:iI%].z'R([X
oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.netwi&Snqf,WtY
这个不错,不过第二句写错了。
adamyang的个人空间 adamyang 发布于2008-03-19 09:44:27

QUOTE:

原帖由 louis5421 于 2008-3-18 20:17 发表 space.itpub.net8\
Y7`}0j&TP%H"U.A

ITPUB个人空间_%c!S B1G

0AH E0N'TJh这个不错,不过第二句写错了。
?%z
k6s2v        L


6J*a-FP        sBI朋友仔细看,我只是换了个变量名,没有错的。
VC&q&\!YT(AuITPUB个人空间IRw~ { @.^er
另外,楼主,oracle索引表结构不是HASH,应该是类似BTREE的结构,呵呵。
晶晶小妹的个人空间 晶晶小妹 发布于2008-03-19 10:28:15
我有说索引是hash结构吗?
adamyang的个人空间 adamyang 发布于2008-03-19 10:34:06

QUOTE:

原帖由 晶晶小妹 于 2008-3-19 10:28 发表 ITPUB个人空间6ACzD/~/A9H
我有说索引是hash结构吗?
ITPUB个人空间MF?!Y|+a1r
space.itpub.net(]X?,ii,x r
呵呵,你定义的类型命名为HASH,让我误以为你在把索引表和HASH混淆。
晶晶小妹的个人空间 晶晶小妹 发布于2008-03-19 10:41:37

blue_prince的个人空间 blue_prince 发布于2008-03-19 11:11:49
勤快的孩子
d.c.b.a的个人空间 d.c.b.a 发布于2008-03-19 11:18:47
高深,看不懂
晶晶小妹的个人空间 晶晶小妹 发布于2008-03-19 11:25:44

QUOTE:

原帖由 d.c.b.a 于 2008-3-19 11:18 发表 ITPUB个人空间c2q0|1C!Z
高深,看不懂
m6k8PP&{ITPUB个人空间 ITPUB个人空间zU6LP9R!t2f\

([!am4M
K3\ d%hnM
  损我呢不是   
向来自遥远星系的勇士致敬 银河使者 发布于2008-04-28 10:48:57
这个程序有一个漏洞,不能把成对的值分开,最好hash2用个二维数据,第二维表示第一维是和hash1中哪个值配对
我来说两句

(可选)

日历

« 2008-07-07  
  12345
6789101112
13141516171819
20212223242526
2728293031  

数据统计

  • 访问量: 26100
  • 日志数: 31
  • 图片数: 4
  • 建立时间: 2008-02-15
  • 更新时间: 2008-05-29

RSS订阅

Open Toolbar