外部表如操作系统上的一个按一定格式分割的文本文件或者其他类型的表。这个外部表对于Oracle数据库来说,就好像是一张视图,在数据库中可以像试图一样进行查询等操作。这个试图允许用户在外部数据上运行任何的SQL语句,而不需要先将外部表中的数据装载进数据库中。不过需要注意是,外部数据表都是只读的,不能够更改。不过在使用外部表时仍然有不少的限制。
限制一:需要先建立目录对象。
在使用外部数据表的时候,需要先建立目录对象。也就是说,要想Oracle数据库系统(在Oracle中实现控制文件多路复用)访问操作系统文件,就必须在数据库中建立指向这个操作系统文件的目录对象,然后通过这个目录对象访问相应的操作系统文件,即用目录对象存储操作文件的保存位置。不过需要注意,这个目录对象普通用户是无权创建的。一般情况下只有特权用户或者数据库管理员角色才可以创建目录对象。如果允许其他用户也可以创建目录对象的话,就需要授权给其他用户。
其实这个目录对象就是操作系统中文件或者表格的存储位置。不过在建立对象的时候,需要小心,Oracle数据库系统不会去确认这个目录是否真的存在。如果在输入这个目录对象的时候,不小心把路径写错了,那可能这个外部表仍然可以正常建立,但是却无法查询到数据。由于建立目录对象时,缺乏这种自我检查的机制,为此在将路径赋予给这个目录对象时,需要特别的注意。另外需要注意的是路径的大小写。在Windows操作系统中,其路径是不区分大小写的。而在Linux操作系统,这个路径需要区分大小写。故在不同的操作系统中,建立目录对象时需要注意这个大小写的差异。最好数据库管理员可以养成一个习惯,无论在什么操作系统中,都采用小写的目录名与文件名。那么在不同的操作系统中,就不用受到这个大小写的困扰了。最后需要注意的是,目录对象名必须唯一。如果目录对象名字有重复的话,系统会提示错误信息:“名称已有现有对象引用”,而不会自动覆盖原有的对象名设置。
虽然这个对象名设置比较简单,但是其是数据库寻找操作系统上文件的唯一途径。所以这个目录对象的创建必须确保准确。否则的话,外部表就可能无法正常使用。
关于Oracle数据库的外部表的知识就为大家总结到这里,上文中是平时的工作中总结出的经验,如有什么不妥的地方,欢迎大家指正,主要是能够帮助到大家我就很高兴啦。
【编辑推荐】