分类: Oracle
2010-06-10 16:12:43
一个物化视图创建的小bug,在NEXT语句后面不能使用“—”开始的注释。否则报错ORA-23319。
模拟错误:
SQL> SELECT * FROM V$VERSION;
BANNER
X1q$pc'`P7z0----------------------------------------------------------------ITPUB个人空间]i)q#nYM)c
Oracle9i
PL
CORE 9.2.0.3.0 ProductionITPUB个人空间?+x\nNyj
TNS for Linux: Version 9.2.0.4.0 - ProductionITPUB个人空间 UV'QQ4^
NLSRTL Version 9.2.0.4.0 - Production
SQL> CREATE TABLE TITPUB个人空间sSPS#u @z
2 (ID NUMBER,ITPUB个人空间1@hC\]\uGa
3 NAME VARCHAR2(30));
表已创建。
SQL> ALTER TABLE T ADD PRIMARY KEY (ID);
表已更改。
SQL> CREATE MATERIALIZED VIEW LOG ON T;
实体化视图日志已创建。
SQL> CREATE MATERIALIZED VIEW MV_T
#Q%zu7x!Ek0 2 REFRESH FAST
U'F{(lKx3wMBz0 3 START WITH SYSDATEITPUB个人空间Y"@ GPI
4 NEXT TRUNC(SYSDATE + 1) --TESTITPUB个人空间'l @%K(@{$c!u,z uf1y
5 AS SELECT *
^1BQ%`if0 6 FROM T;
+i.C Z1M8?3k%N4E R{+F9s0FROM TITPUB个人空间1ZcS7E U)[]F1w:M
*
0yi%G(v/}IX0ERROR位于第6行:
0YB[K9l6aVe0ORA-23319:参数值"TRUNC(SYSDATE + 1) --TEST "不正确ITPUB个人空间]^WK.l$aFB
ORA-06512:在"SYS.DBMS_JOB", line 57
_&YJ$B0M8Vi5a0ORA-06512:在"SYS.DBMS_JOB", line 134
[-No[!Y0ORA-06512:在"SYS.DBMS_IREFRESH", line 186
9Qy*V|{k!m#i0ORA-06512:在"SYS.DBMS_IREFRESH", line 369
:x}[p0pXB4?0ORA-06512:在"SYS.DBMS_REFRESH", line 88ITPUB个人空间nD4W~9sg9eQ
ORA-06512:在"SYS.DBMS_REFRESH", line 62ITPUB个人空间f*{j%]A
ORA-06512:在"SYS.DBMS_ISNAPSHOT", line 76ITPUB个人空间H1N(b Mw|4c
ORA-06512:在line 1
0V@s1A qMbKS*z0SQL> CREATE MATERIALIZED VIEW MV_T
M:Y+j5r4Y|:?0 2 REFRESH FAST
(CffH;O6]0 3 START WITH SYSDATE
O4I0T[LX9X Ba0 4 NEXT TRUNC(SYSDATE + 1) /*TEST*/ITPUB个人空间\/Sv:Zi!K!b
5 AS SELECT *
}#Jh+_'P p+Bg0 6 FROM T;
实体化视图已创建。
从错误信息可以判断,Oracle错误的将—TEST这个注释也作为NEXT语句的一部分了。去掉注释或者使用/**/方式的注释都不会报错。
而且错误只是发生在NEXT语句处,其他语句后面如果添加注释并不会导致这个错误。
在metalink中并没有发现这个错误的描述,估计Oracle还没有发现这个bug,显然也就不会对这个bug进行修正。
在11.2中,这个错误仍然存在:
SQL> SELECT * FROM V$VERSION;
BANNERITPUB个人空间gc%S+kSh*n
--------------------------------------------------------------------------------
8@5Z-t@2ww:J3],l0Oracle Database
PL/SQL Release 11.2.0.1.0 - ProductionITPUB个人空间)JA `(H,KH n%E
CORE 11.2.0.1.0 ProductionITPUB个人空间)],H0oL\(}q}m
TNS for Linux: Version 11.2.0.1.0 - ProductionITPUB个人空间 znsw)A-\3Y
NLSRTL Version 11.2.0.1.0 - Production
SQL> CREATE TABLE T
-o \f?D5s'i0 2 (ID NUMBER,ITPUB个人空间;LE_G&Y k%J
3 NAME VARCHAR2(30));
表已创建。
SQL> ALTER TABLE T ADD PRIMARY KEY (ID);
表已更改。
SQL> CREATE MATERIALIZED VIEW LOG ON T;
实体化视图日志已创建。
SQL> CREATE MATERIALIZED VIEW MV_TITPUB个人空间2U*Q la pY;|D+{I
2 REFRESH FAST
.M*b ^r)ST0 3 START WITH SYSDATEITPUB个人空间/S cK:wk mr:_n
4 NEXT TRUNC(SYSDATE + 1) --TEST
trXzj+} PPB"@0 5 AS SELECT *ITPUB个人空间)|/v.x6Y&R
6 FROM T;ITPUB个人空间&w*sli;t-[,k
FROM TITPUB个人空间'\xc7LP {,so1y6u;K
*
1x myWV(A5x$J_0第6行出现错误:ITPUB个人空间;`8egZu_ v/| J4?
ORA-23319:参数值"TRUNC(SYSDATE + 1) --TEST "不正确ITPUB个人空间YS6C?#Z5D4W ve7g
ORA-06512:在"SYS.DBMS_JOB", line 60ITPUB个人空间&Pg'W,NZ Od#Y
ORA-06512:在"SYS.DBMS_JOB", line 139
4T^|0i \0ORA-06512:在"SYS.DBMS_IREFRESH", line 188ITPUB个人空间*Sv9fRV0n8e
ORA-06512:在"SYS.DBMS_IREFRESH", line 371
:hI1p7D/q Z0ORA-06512:在"SYS.DBMS_REFRESH", line 88ITPUB个人空间P4K-h,^6QC
ORA-06512:在"SYS.DBMS_REFRESH", line 62ITPUB个人空间 uww wwH y
ORA-06512:在"SYS.DBMS_ISNAPSHOT", line 76
o0p.TU6i0D^\0ORA-06512:在line 1