您的位置:首页 > 数据库 > Oracle

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

2008-03-13 17:58 459 查看
同样一段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还是故意这样做的。
目前还不清楚其对分区表的影响。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐