天地不仁,以万物为刍狗!

刚写的一个把表rename然后重建分区表的一个存储过程!

上一篇 / 下一篇  2007-07-09 00:00:00 / 个人分类:oracle

存储过程注视很详细了,不多说了

CREATE OR REPLACE PROCEDURE Altertabletopartition_Zxt(Tablename IN VARCHAR2,ITPUB个人空间r+cKg;gc
Midtablename IN VARCHAR2 DEFAULT '',ITPUB个人空间y6{daTUi
Partitioncolomn IN VARCHAR2,
nD+?2bfH0 Partitionstartstr IN VARCHAR2 DEFAULT '',
z BoGA.w0 Partitionendstr IN VARCHAR2 DEFAULT '',
h]&PIG-l-M0 Partitioncolomntype IN CHAR DEFAULT '1',ITPUB个人空间}k)~3z,in r H
Partitiontype IN CHAR DEFAULT '1',ITPUB个人空间E,Nw"UL^#Ceu
Parttablespace IN VARCHAR2 DEFAULT NULL,
)lX$z4wR0 Varstart IN VARCHAR2 DEFAULT '0',ITPUB个人空间.QD n/~#nE:?:F
Varinceraseby IN NUMBER DEFAULT 1,
[b7I"_^8^\@0 Varend IN VARCHAR2 DEFAULT '',
1t8rmEGXi8f6H0 Dropmidtabornot IN CHAR DEFAULT '1'--,
&z dT \$[}}0 --State OUT CHARITPUB个人空间F9t8Bhn#S@ m4V
) ISITPUB个人空间)_iJK*S,~ K#I
Mymidtablename VARCHAR2(30); --中间表的名称ITPUB个人空间r]roUa4h6Op
Partitiondml VARCHAR2(32767); --分区的DML、最大长度ITPUB个人空间F8@pFf7_$f/rSZ
Mypartitiontype VARCHAR2(10); --分区类型ITPUB个人空间z } B.F(}"nf
Partitiontypesql VARCHAR2(20); --分区DDL;
h)B/@cio0 Myvarstart VARCHAR2(30); --起始字段
1jY\&r*\R0 Myvarend VARCHAR2(30); --终止字段ITPUB个人空间%W;ppux
i INTEGER; --循环
*OIPh~g6t k~0 Uu INTEGER; --用以分200字节打印分区DDL;
"H[n:V'?(A*mM!r#l0 g INTEGER; --对于日期类型的分区字段,在首次循环,不增加递增模式,Varinceraseby*0=0;
s`es4F&X6[&DgL0 --在下次循环中再按照递增模式增加 Varinceraseby*1=VarincerasebyITPUB个人空间uP2JP4}
BEGINITPUB个人空间*rD\%Uz^*A
i := 0;ITPUB个人空间g.aV;C-vk%\]N
g := 0;
6c ox,X'J4u|!X4f0 /*
F@#O!X8of0 --Z.X.T
;? lqfZH)J0 --20070129
P#B mM;r7Id%D;A0 Q:由于数据仓库开发过程中可能可能存在建表的时候没有考虑到分区,在以后的应用中会增加查询的负担和相应时间ITPUB个人空间;Q)g-b(KQ ^3?w
A:本过程把一个非分区表转换成分区表,只考虑在原表上的一层分区,不考虑subpartitionITPUB个人空间M1cl(F%}yf9S J
分区逻辑:本程序采用先rename 表,然后再按照中间表创建原始表,同时加上分区的属性ITPUB个人空间2fLj6q O l
对于LIST类型,只提供按照一个类型的分区,也就是说只能PARTITION ** VALUES ('CT')而不能PARTITION ** VALUES ('CT','RI'..)ITPUB个人空间9a#ngb\9c
过程是用于下列情况,1:表数据在修改时间没有变化,对于时时变化的表,建议用oracle的在线重定义来实现!
u7vd4`2hXE0 2:分区字段Varinceraseby有递增模式,如:2004、2005、2006
3Qw?f-kT3CZH/RG`0 3:新增对于字段内部有递增方式的,如GLFW01AA、GLFW02AA、在第5位和第6位上有递增模式,ITPUB个人空间Wx(lL~N*EA7N
需传partitionstartstr=>'GLFW';partitionendstr=>'AA'
:]-^K*P!o0 4:分区会删掉所有索引等ITPUB个人空间#rJ:g.\4G%~ Vy
5:如果表上有物化试图日志,则应先drop掉,否则汇报错!
P$][Sy5AB ~,bc0 Tablename :原tableNameITPUB个人空间Xe}&zzl'\pE
Midtablename :过程中间的表名,如果没有传Midtablename则用Tablename构造Midtablename
*C4|v!Hb{\+y0 Partitioncolomn :原表上分区的字段名称ITPUB个人空间 Ili KJuv
partitionstartpoint :分区字段的分区起始位置,如列为GLFW01、GLFW02等则可以作为list的分区方式分区
8SH9e j Aa~5hO0 partitionstartpoint为01、02在列中的起始位置ITPUB个人空间'p @ f1HU Nj%h
Partitioncolomntype :要分区的字段类型,1--varchar2、2--number、3--char、4--date
E@&O U k ic8B)g0 parttablespace :分区表空间,为空则为当前用户的表空间ITPUB个人空间-e |9RpUu~B
Partitiontype :分区类型1--Range、2--List、3--Hash
5xsMn[M0Q0 Varstart :分区字段(Partitioncolomn)的起始,对于hash则不需要传入,只要传入Varinceraseby(用来表示要分几个区)就行
G7k A|7h0 Varinceraseby :分区字段的增长方式,如:起始为2004年,以1增长则第二个分区就是2004+1=2005,对于hash方式则表示hash分区的个数ITPUB个人空间y&a g0J P7PJ.pN+r
Varend :分区字段(Partitioncolomn)的终止,对于hash则不需要
2jSm(u)Np2t+Z:PM0 Dropmidtabornot :需不需要drop中间表1--需要、2不需要
q-z+a2SM*e0 --State :返回成功分区标志1--成功、2--不成功ITPUB个人空间t*yX0ia&P
--exampleITPUB个人空间 zg#H'Rjq
1:
L2XH3Y0SG&_@L7WM$B4P0 execute altertabletopartition_zxt('f_fix_fixreport','f_fix_fixreport1','REPORTCODE','GLFW','','1','2','shuihu','1','1','17','2');
5BCaC,xw{0k A0 2:
v&Hs ?$u yE6h3X4g0 execute Altertabletopartition_Zxt('f_reg_levyauthinfo','','AUTHDATE','','','4','1','shuihu','20040101',1,'20070101','2');ITPUB个人空间 Q ^O5L*Wz
Tablename IN VARCHAR(30) NOT NULL,
C-qg!nOr0 Midtablename IN VARCHAR(30) DEFAULT '',ITPUB个人空间,YcuS8vk*k |
Partitioncolomn IN VARCHAR2(30) NOT NULL,
A!o6`b v0C0 partitionstartstr IN varchar2(30) default '',ITPUB个人空间 AD&o9[b$Tt[
partitionendstr IN varchar2(30) default '',ITPUB个人空间&e$Zk5p2uT
Partitioncolomntype IN CHAR(1) DEFAULT '1',ITPUB个人空间.ky.Pbrw"]2{*X
Partitiontype IN CHAR(1) DEFAULT '1',
1V7v Wm]%iV{0 Parttablespace IN VARCHAR(30) DEFAULT '0',ITPUB个人空间;RJs-{,MU
Varstart IN VARCHAR2(11) DEFAULT '',ITPUB个人空间GT0t$U n,svCSO
Varinceraseby IN NUMBER DEFAULT 1,
.TFQ;j%t9`tC0 Varend IN VARCHAR2(11) DEFAULT '0',
cN6UyR0 Dropmidtabornot IN CHAR(1) DEFAULT '1',ITPUB个人空间0`vH/ut3eg6b
State OUT CHAR(1)ITPUB个人空间`Yn}!K
*/ITPUB个人空间9`}8rY8C0O1h p
Dbms_Output.Put_Line('tablename=' || Tablename);
]|)Y$o3D!w0 Dbms_Output.Put_Line('Midtablename=' || Midtablename);
'k0L)@R7Y?;q0 Dbms_Output.Put_Line('Partitioncolomn=' || Partitioncolomn);
7o;p:L-~"X:s0 Dbms_Output.Put_Line('partitionstartstr=' || Partitionstartstr); --partitionendstr
(yL:w/F0Q0Z'a ym0 Dbms_Output.Put_Line('partitionendstr=' || Partitionendstr);
"gQ'CboW F3OQ0 Dbms_Output.Put_Line('Partitioncolomntype=' || Partitioncolomntype);ITPUB个人空间Av#b|l)d@
Dbms_Output.Put_Line('Parttablespace=' || Parttablespace);
0gZ;`9?:[2g0 Dbms_Output.Put_Line('Partitiontype=' || Partitiontype);
*u3X"w.h(a{Yv0 Dbms_Output.Put_Line('Varinceraseby=' || Varinceraseby);
@c#w B3T0 Dbms_Output.Put_Line('Varstart=' || Varstart);ITPUB个人空间1O`#HV}:CQ6c
Dbms_Output.Put_Line('Varend=' || Varend);ITPUB个人空间/j*M8Wa%B$MVBG,b
Dbms_Output.Put_Line('Dropmidtabornot=' || Dropmidtabornot);
1]j/\X_Ws N)m8Y0 --对数据数据的校验ITPUB个人空间S-p6P'Y4_c
--Tablename 、Partitioncolomn不能为空ITPUB个人空间2CW?UZH4d/V
IF (Tablename IS NULL OR Partitioncolomn IS NULL) THEN
aa?1Vr n d0 Dbms_Output.Put_Line('表名、分区字段名不能为空!');
_mBoD5S,Q'\0 GOTO Aa;ITPUB个人空间'a_#j8n}M,g]
END IF;ITPUB个人空间)Q+dL(L(d
--Tablename的长度--字段定义不能超过30位
yoe#Y}0 IF (Lengthb(Tablename) > 30 OR Lengthb(Midtablename) > 30 OR Lengthb(Partitioncolomn) > 30 OR Lengthb(Parttablespace) > 30) THENITPUB个人空间e\(\#HK~5M"R
Dbms_Output.Put_Line('字段名成太长!');
$Q4k$\ ZF$}sbhv J(rv0 GOTO Aa;
+mQ(}hp2x\R-]0 END IF;ITPUB个人空间A,m+?q)Jw
--初始化各数值
&z C'Z6a7L1R$C0 IF (Partitiontype = '3') THENITPUB个人空间Y~2{,bl o mX
--对于hash 分区,不能只指定1个分区(Varinceraseby=1)
o#[ f,Q"j#bQ0 IF (Varinceraseby = 1) THEN
(\K0E#Ww*r)g ]0 Dbms_Output.Put_Line('对于hash 分区,不能只指定1个分区!');ITPUB个人空间/_(\M"[ep\ nN c
GOTO Aa;
"l7B*D s+?&B0 ELSE
F"CKoL&X/Q^,S0 Myvarstart := 0;
(FdVPw,t'Fb&c0 Myvarend := Varinceraseby;
,DiF.A\/I0]R6W0 END IF;
"S.R}@^#S dD4X&rT2DF0 ELSE
+~2T} ] lnZ0 Myvarstart := Varstart;
[ J6p"v/|#g"Q0 Myvarend := Varend;
LL:l:Lo fm#M0 IF (Myvarstart = Myvarend) THEN
$U `/`Ut$Tw0 Dbms_Output.Put_Line('指定一个分区没有意义!');
b,y8W _Q0 GOTO Aa;
S:tYv1|ww!v%P,j0 END IF;ITPUB个人空间U|xnv~ xX6j @
END IF;
N)j^a4G${0 ----初始化各数值end;ITPUB个人空间N`YJr#v
--Partitioncolomntype必须为1、2、3、4
8{TF3bk@K+i0 IF (Partitioncolomntype > '4' OR Partitioncolomntype < '1') THENITPUB个人空间(Y!L'[7o}'\5y8Z-U| m
GOTO Aa;
?"t5bxFs0 END IF;
;R'?&f#d~tP0 --Partitiontype 必须为1--Range、2--List、3--Hash
fqF"d~*Hd0D'@3_0 IF (Partitiontype > '3' OR Partitiontype < '1') THENITPUB个人空间1F"f:L3Y.D? o2a }q8X
GOTO Aa;ITPUB个人空间#P!l4\1i x8@8l)e
ELSEITPUB个人空间$i)GMh:N'I:Ei T
--初始化各字段
z#W7jT-~Y?0 IF (Partitiontype = '3') THENITPUB个人空间Ha!b~1V as
Mypartitiontype := ' hash ';
'`/WL Bq9@0 Partitiontypesql := '';ITPUB个人空间b|Z9O7\9^
ELSIF (Partitiontype = '2') THEN
[|a-_#^i0 Mypartitiontype := ' List ';ITPUB个人空间 uo,Qmx.D7i/^
Partitiontypesql := ' VALUES ';ITPUB个人空间W3Y6cN:t-D(pu d
ELSIF (Partitiontype = '1') THEN
q_/@K)f0 Mypartitiontype := ' Range ';ITPUB个人空间]t|Q%Q d|%O|"z
Partitiontypesql := ' VALUES LESS THAN ';
#Bbx1s9{C0 END IF;ITPUB个人空间\!c` F0v-_NK eWo
----初始化各字段end;
A n2I5V?5fC0 END IF;
I J B2bx0 --对数据数据的校验 end;
'SaL i.YfOK+q0 --得到中间表Midtablename
_(B(M(uw y0 --如果没有传Midtablename则用Tablename构造MidtablenameITPUB个人空间O3Z9t9Z e o8W
IF (Midtablename IS NOT NULL) THENITPUB个人空间2a'g|7a!n9_mNf
Mymidtablename := Midtablename;ITPUB个人空间dfx Pmz
ELSE
JV$vq9nO0 Mymidtablename := Tablename;ITPUB个人空间 Af%MhUKu'j'm!^,]
--如果没有传Midtablename并且Midtablename<25则再其后加'_$zxt',如果Midtablename>25,则截取前25位加'_$zxtITPUB个人空间Am-p@ kC%qr
IF (Lengthb(Midtablename) <= 25 AND Midtablename IS NOT NULL) THEN
eD[ ^/O CK%_ z0 Mymidtablename := Midtablename || '_$zxt';ITPUB个人空间XG9J+f8W7\W(Vd,H4K
ELSEITPUB个人空间gx+k xhZ6i@D'GA
Mymidtablename := Substrb(Tablename, 0, 25) || '_$zxt';
.{%`M1q{'x#j0 END IF;ITPUB个人空间 F a0z{M d2Eg/f4?3t
END IF;
C6vz y2c0}'K0 Dbms_Output.Put_Line('myMidtablename=' || Mymidtablename);ITPUB个人空间4H"C m$E5m4uP
--得到Midtablename end;
t+VgL k6A7J9Lb0 --将原标rename为中间表
J a#Q&v7[$UD0 Dbms_Output.Put_Line('renameDML=' || 'ITPUB个人空间 Z#i!B9c*m
Alter Table ' || Tablename || ' rename To "' || Mymidtablename || '"');
6Fm0R8h:P*lyY L%G0 IF (Length(Tablename) = Lengthb(Tablename)) THEN
CT$F\| K0 EXECUTE IMMEDIATE '
CJ;\C2M;K*T g$`M#N0 Alter Table ' || Tablename || ' rename To ' || Mymidtablename;
P7cL%uzB%B0 ELSE
4qV9| NQa#fP0 EXECUTE IMMEDIATE 'ITPUB个人空间itt:i:pWl;\1b
Alter Table ' || Tablename || ' rename To "' || Mymidtablename || '"';ITPUB个人空间|bX-_6_%C-i4[
END IF;
C.hA3?N]Ay2XOn0 --将原标rename为中间表 end;
K%]sHx0 --构造分区语句ITPUB个人空间o*ME%rO? D8p
Partitiondml := 'PARTITION By' || Mypartitiontype || '(' || Partitioncolomn || ')
T8wx*ae,s0 ( ';ITPUB个人空间 nQDr:V8yQ%@
Dbms_Output.Put_Line('Myvarend=' || Myvarend);
/bYkX3\9u%c:M} J R0 IF (Partitioncolomntype = '4') --分区字段为日期或者月份类型字段
vW2JV#w R2B0 THEN
[1B]#D2xux%n0 --为to_date('yyyymmdd')做准备ITPUB个人空间,e2ivf/gX R vu
IF (Length(Varstart) = 6) THEN
D7^H1? v$ttYu,\0 Myvarstart := Substr(Myvarstart, 0, 6) || '01';ITPUB个人空间!X|%}YS
Myvarend := Substr(Myvarend, 0, 6) || '01';
.TT;l5W7o d ?7s0 ELSE
h"[1UK}c+O@F&l3}0 Myvarstart := Substr(Myvarstart, 0, 8);ITPUB个人空间RZ'E3U^v8@
Myvarend := Substr(Myvarend, 0, 8);
"_%iX*B [V0 END IF;
Ut;e2Mc!s$W0 --为to_date('yyyymmdd')做准备 end;
[AlH ~/j0QO0 WHILE (Add_Months(To_Date(Myvarstart, 'yyyymmdd'), Varinceraseby) <= To_Date(Myvarend, 'yyyymmdd'))
2v+E&\"y` J7X6J0 LOOPITPUB个人空间9^;h X1^jW rr L
Myvarstart := To_Char(Add_Months(To_Date(Myvarstart, 'yyyymmdd'), Varinceraseby * g), 'yyyymmdd');ITPUB个人空间&I.[4K q q8Y!L!jf2d
IF (Length(Varstart) = 6) --月份,对于list类型的月份,将PARTITION ** VALUES ('20040701') 变成VALUES ('200407')
,C(J Bj#^$P(K ~0 THENITPUB个人空间_7J}9AhP
Myvarstart := Substr(Myvarstart, 0, 6);
u r+s5K#q5bE0 END IF;ITPUB个人空间6x4c%v mHgi)Qo
Dbms_Output.Put_Line('Myvarstart=' || i || '=' || Myvarstart);
V1t6W-dy%X!GM:hio0 --While ing
6Ge(L)k0T6H%q0 Partitiondml := Partitiondml || ' PARTITION ' || Partitioncolomn || i || Partitiontypesql;ITPUB个人空间8BKn1ubSo
IF (Partitiontype != '3') --不是hash分区ITPUB个人空间m4PFmh;o
THEN
iLu4U|BAH0 Partitiondml := Partitiondml || '( ''' || Myvarstart || ''' )';
(iru+o.Q6E9g0 END IF;ITPUB个人空间u*X:VMD-\9~
IF (Parttablespace IS NOT NULL) THENITPUB个人空间Wib*NV
Partitiondml := Partitiondml || ' TABLESPACE ' || Parttablespace || ' ,';ITPUB个人空间9^RH `T!} @ IR}G
ELSE
6G!OZ7~S x0 Partitiondml := Partitiondml || ',';ITPUB个人空间,d B8A/WZG
END IF;
#E:v3{7l r`v v4i#f3`0 i := i + 1;ITPUB个人空间!T"@vi2PI
IF (Length(Varstart) = 6) THENITPUB个人空间X%hL'v,h
Myvarstart := Myvarstart || '01';
mR,O1lG2K"O-Z0`'t0 --Myvarend := Myvarend || '01';ITPUB个人空间@3f4I-VuZ${QUpfq
END IF;
0|OK?P(@0 g := 1;
Y y,G3nP0 END LOOP;
SU&I.\9b~V M0 ELSEITPUB个人空间 hD_!XBx-Y$j5]`
--不是日期型字段,年度、number等ITPUB个人空间? R{U6L"Un#z
WHILE (Myvarstart + Varinceraseby <= Myvarend)
I)S%z J*FMPKY*Ck0 LOOP
Y+u;Guh0 Myvarstart := Myvarstart + Varinceraseby * g;
,ax1n2T)Inz2[0U0 Dbms_Output.Put_Line('Myvarstart=' || Myvarstart);
$~h n0s5Zk},V0 IF (Myvarstart < 10) THENITPUB个人空间 P;bU+_b|s!W[
Myvarstart := '0' || Myvarstart;
Kp"]Pn,pi"L0 END IF;ITPUB个人空间)z L;G [ Yl x*Z
Dbms_Output.Put_Line('Myvarstart=' || i || '=' || Myvarstart);ITPUB个人空间F-t"^"fZ:G6\
--While ing
i5q&e+x{]!b-R _I0 Partitiondml := Partitiondml || ' PARTITION ' || Partitioncolomn || i || Partitiontypesql;
EJeg3pG5u(`?G0 IF (Partitiontype != '3') --不是hash分区ITPUB个人空间*L(? A#?4h$z2X%cl
THENITPUB个人空间t`u Zo`#DJ$_
Partitiondml := Partitiondml || '( ''' || Partitionstartstr || Myvarstart || Partitionendstr || ''' )';ITPUB个人空间4giWnK'Pzl
END IF;
sm2f#D Dr;]X0 IF (Parttablespace IS NOT NULL) THEN
uU[GD3EJ,m0 Partitiondml := Partitiondml || ' TABLESPACE ' || Parttablespace || ' ,';
X Q~zF5Fk9C5q0 ELSE
rz0|c%?HC0 Partitiondml := Partitiondml || ',';
n0K3~h+hb}0 END IF;ITPUB个人空间PG3H0Fp9tiJ3v
i := i + 1;
j3V;FUn|0{0 g := 1;
/C^ R&c1wO0U$v._)sX0 END LOOP;
G Ldti)u q0 END IF;ITPUB个人空间6~5Liq h*e2t8I#`
--对Partitiondml的后续操作ITPUB个人空间 \U/~V(I4O!{`R
IF (Partitiontype = '1') --1--Range--增加Maxvalue分区ITPUB个人空间-Z| s+z$X.Z Wn h
THEN
'h$?V;f'?&x/Cem(c0 Partitiondml := Partitiondml || ' PARTITION ' || Partitioncolomn || i || Partitiontypesql || '(Maxvalue)';
GpSL#?F2P0 IF (Parttablespace IS NOT NULL) THEN
T4B y9\X*L'C E$n%@0 Partitiondml := Partitiondml || ' TABLESPACE ' || Parttablespace || ' )';ITPUB个人空间!aT$]JlgM
ELSE
'\Ht&i!F*iC,r L0 Partitiondml := Partitiondml || ' ) ';ITPUB个人空间gwGf o7i"jc
END IF;
P@a2q;k!ql0 ELSEITPUB个人空间/m6V#\^oz
Partitiondml := Substr(Partitiondml, 0, Length(Partitiondml) - 1); ---去掉最后的一个逗号ITPUB个人空间I#[N&MRt`C
Partitiondml := Partitiondml || ' ) ';ITPUB个人空间b;~ TEENE,Y
END IF;ITPUB个人空间1\cJ:PI
----对Partitiondml的后续操作 end;
*q[*[5h:YX8Y;T0 ----构造分区语句 end;
MI R0_X?(je[{0 --构造DDL;
~` A/X$k9Zt4P]0 IF (Length(Tablename) = Lengthb(Tablename)) THEN
;d]ACs0}&j$t0 Partitiondml := 'Create Table ' || Tablename || ' ' || Partitiondml || ' as Select * From ' || Mymidtablename;ITPUB个人空间)OdK`7H?TK
ELSE
NO*N8| _!J3\7}{0 Partitiondml := 'Create Table ' || Tablename || ' ' || Partitiondml || ' as Select * From "' || Mymidtablename || '"';
*C~$s{.P#?q0 END IF;
2[ HzK+R)y_,W2B0 Dbms_Output.Put_Line('Partitiondml length=' || Length(Partitiondml));ITPUB个人空间'S(V{)VKe|pS
Uu := Length(Partitiondml) / 200;
US Q"b m{ P:F0 FOR i IN 1 .. UuITPUB个人空间.Y` A;K?7Bq3WjM
LOOP
B(v ]URB\0 Dbms_Output.Put_Line(Substr(Partitiondml, (i - 1) * 200, 200));ITPUB个人空间+e)O.dp/Z#@
END LOOP;ITPUB个人空间FY3e5VR&Y9f'S4c
--构造DDL end;ITPUB个人空间[jP N \o7r*JG#V_
--ExecuteITPUB个人空间:iCw:_ _u j8WX
EXECUTE IMMEDIATE Partitiondml;
` h _W w0 --删除中间表
/PWD jj$`:C,q0 IF (Dropmidtabornot = '1') THEN
7h ft-o.],w BA ~(QM%I#X$o0 IF (Length(Tablename) = Lengthb(Tablename)) THEN
yD7v?+vQz0 EXECUTE IMMEDIATE '
;\+B0njCi0 drop Table ' || Mymidtablename||' cascade constraints';
a+J5A6q*lZ!XWC0 ELSE
naNBn7D(yn0 EXECUTE IMMEDIATE '
7]+h0q8d{ z0 drop Table "' || Mymidtablename || '" cascade constraints';
1_!jIB V0 END IF;
Yg,\#F H9L6Z&e0 END IF;
MLN6{'].@0 ----删除中间表end;ITPUB个人空间.i5rp Hq a D)a}q
--State := '2';ITPUB个人空间w#S*JT;S h(O
GOTO aa;ITPUB个人空间nz HZ$c2W!S!O
--出错处理
Fx,i|K8Rz}0 <<aa>>
W y_ r;A9D3k'R0 --State := '1';
,R U[9? F9}j/R0 Dbms_Output.Put_Line('State end ');
$zV \!\f#H jBJ0END Altertabletopartition_Zxt;

ITPUB个人空间n3s;G,X b@

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-11-24  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 12228
  • 日志数: 273
  • 图片数: 1
  • 文件数: 2
  • 建立时间: 2007-12-01
  • 更新时间: 2008-11-19

RSS订阅

Open Toolbar