oracle job的奇怪问题(已解决,个人分析是大小写转换的缘故)

同样一段SQL,除了表名分为大小写ow_ws_entp_line,执行情况如下:
SQL> exec dbms_ddl.analyze_object('TABLE',NULL,'OW_WS_ENTP_LINE','ESTIMATE',NULL,20,'for table');
 
PL/SQL procedure successfully completed
以上执行情况正常。看以下执行: 
SQL> exec dbms_ddl.analyze_object('TABLE',NULL,'ow_ws_entp_line','ESTIMATE',NULL,20,'for table');
 
begin dbms_ddl.analyze_object('TABLE',NULL,'ow_ws_entp_line','ESTIMATE',NULL,20,'for table'); end;
 
ORA-20000: Unable to analyze TABLE "ow_ws_entp_line", insufficient privileges or does not exist
ORA-06512: at "SYS.DBMS_DDL", line 192
ORA-06512: at line 2 

出现了如上的问题。不清楚是否是由其表名的大小写引起的。决定再试一个表:
SQL> exec dbms_ddl.analyze_object('TABLE',NULL,'ow_ws_worksheet_group','ESTIMATE',NULL,20,'for table');
 
begin dbms_ddl.analyze_object('TABLE',NULL,'ow_ws_worksheet_group','ESTIMATE',NULL,20,'for table'); end;
 
ORA-20000: Unable to analyze TABLE "ow_ws_worksheet_group", insufficient privileges or does not exist
ORA-06512: at "SYS.DBMS_DDL", line 192
ORA-06512: at line 2
 
SQL> exec dbms_ddl.analyze_object('TABLE',NULL,'OW_WS_WORKSHEET_GROUP','ESTIMATE',NULL,20,'for table');
 
PL/SQL procedure successfully completed
还真的跟表名大小写有关。估计这个包在系统中找表的时候是按照大写来找的,对于小写的表也不做转换,因此一旦遇到小写的表,就抱错找不到该表或没权限了。
测试,将小写的表转成大写,执行:
SQL> exec dbms_ddl.analyze_object('TABLE',NULL,upper('ow_ws_worksheet_group'),'ESTIMATE',NULL,20,'for table');
 
PL/SQL procedure successfully completed
ok。基本上确定问题所在了。
测试,一个不存在的表,执行:
SQL> exec dbms_ddl.analyze_object('TABLE',NULL,'test','ESTIMATE',NULL,20,'for table');
 
begin dbms_ddl.analyze_object('TABLE',NULL,'test','ESTIMATE',NULL,20,'for table'); end;
 
ORA-20000: Unable to analyze TABLE "test", insufficient privileges or does not exist
ORA-06512: at "SYS.DBMS_DDL", line 192
ORA-06512: at line 2
报同样错误。
由此可得知Oracle对此问题没有做大小写转换,不知道是bug还是故意这样做的。
目前还不清楚其对分区表的影响。

你可能感兴趣的:(oracle job的奇怪问题(已解决,个人分析是大小写转换的缘故))