博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

CLEANER

总觉得时间不够用,原来是自己把时间分散了。
   yuechaotian.cublog.cn
关于作者  
name:yuechaotian
employment:coder
age:25
from:NEU
about me:a retardate
email:yuechaotian(at)gmail.com
msn:yuechaotian(at)hotmail.com

我的分类  




关于Oracle中的对象在数据字典中的存储方式
刚碰到一个问题:我们测试库中有一个包体名称为"PKG_A_RYBG_szgs",同时还存在一个包体"PKG_A_RYBG_SZGS"。它们的创建方式如下:
 
CREATE OR REPLACE PACKAGE BODY "PKG_A_RYBG_szgs" AS
...
 
CREATE OR REPLACE PACKAGE BODY "PKG_A_RYBG_SZJG" AS
...
 
数据库中出现了两个“同名”的包,我要删除一个!但执行DROP后,只能删除第二个,第一个一直无法删除,即使在PL/SQL Developer中点右键删除也是如此。
是Oracle的错吗?当然不是!
 
错误原因:这些对象(objects)默认在数据字典中是按照大写方式存储的,但双引号可以改变这种默认关系。上面例子中,确实在数据字典中存在两个过程,并且名称是不一样的。
 
我们举个小例子:
SQL> create table test1(a varchar2(1));
 
表已创建。
 
SQL> desc test1
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ---------------------------
 A                                                  VARCHAR2(1)
 
SQL> alter table test1 add "a" varchar2(1);
 
表已更改。
 
SQL> desc test1;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ---------------------------
 A                                                  VARCHAR2(1)
 a                                                  VARCHAR2(1)
 
SQL> create table "test1"(a varchar2(1));
 
表已创建。
 
SQL> create table "Test1"(a varchar2(1));
 
表已创建。
 
SQL> insert into test1 values(1,1);
 
已创建 1 行。
 
SQL> insert into "test1" values(2);
 
已创建 1 行。
 
SQL> insert into "Test1" values(3);
 
已创建 1 行。
 
SQL> select * from test1;
 
A a
- -
1 1
 
SQL> select * from "test1";
 
A
-
2
 
SQL> select * from "Test1";
 
A
-
3
 
SQL> drop table test1;
 
表已丢弃。
 
SQL> drop table "test1";
 
表已丢弃。
 
SQL> drop table "Test1";
 
表已丢弃。
 
SQL>
上面的存储过程的原因就是如此,所以drop的时候,其实是给drop掉那个大写的过程了,因为使用的命令是:
drop package body pkg_a_rybg_szgs;
而不是:
drop package body "PKG_A_RYBG_szgs";
 
不止表、列、存储过程,其他对象也是如此。所以大家要注意,在创建数据库对象的时候,最好不要带有双引号。而使用PL/SQL Developer工具开发的时候,这是很容易出现的问题。

 发表于: 2008-03-07,修改于: 2008-03-07 20:15 已浏览351次,有评论0条 推荐 投诉

  网友评论

  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:0.01698

京ICP证041476号