oracle 外部表及解决ora-29400,ora-29913错误

 对外部表的理解及测试,,,,如有理解不正确请大家指正

 

语法:

create table 表名(

列名1,列名2,......

)

organization external  ###说明创建外部表

(

 type 访问类型            ###一般是 ORACLE_LOADER ,ORACLE_DATAPUMP

 default directory   路径名   ####指定默认目录对象

 access parameter (        ###数据源文件与表中行之间的映射关系

           records delimited by 设置分隔符    ###一般是newline

           [badfile 路径名:'文件名']   ##存放错误日志的目录和文件名

           [logfile 路径名:'文件名']    ##日志的目录和文件名

           [discardfile 路径名:'文件名']  ###废弃文件存放的目录和文件名

          fields terminated by  '分隔符'   ###设置文件中字段的分隔符

          [ missing field values are null]   ##无值字段的处理

          [reject rows with all null fields]   ##无值行的处理

              ( 列名1, 列名2, .....)   

   )

location (路径名:'数据文件名')

)

[reject limit(或unlimited) 数值 ] ###设置多少行转换失败时返回oracle错误,默认为0

[parallel]

 

例子:

1.在系统下创建三个目录

/home/oracle/test_folder/data --数据文件目录

touch test.dat --数据文件

录入数据

1001,abc,2013/07/12,1000
1002,abcd,2014/01/31,1000
1003,bdc,2012/03/12,1020

/home/oracle/test_folder/log  --日志文件目录

touch test.log --日志文件

/home/oracle/test_folder/bad --错误文件目录

touch test.bad --错误文件

2.创建目录

登陆 conn  / as sysdba 下

create or replace directory DATA_DIR AS '/home/oracle/test_folder/data' ;  --数据文件目录
create or replace directory LOG_DIR AS '/home/oracle/test_folder/log' ;--日志文件目录
create or replace directory BAD_DIR AS '/home/oracle/test_folder/bad' ;--错误文件目录

3.授权

grant write ,read on directory DATA_DIR to scott;
grant write ,read on directory LOG_DIR to scott;
grant write ,read on directory BAD_DIR to scott;

3.创建表
###在scott 用户下
create table ext_emp
(
 emp_no varchar2(10),
 epm_name varchar2(20),
 hirte_date date,
 comm number
)
organization external
(
 type ORACLE_LOADER
 default directory DATA_DIR
 access parameters
 (
  records delimited by newline
  badfile BAD_DIR:'test.bad'
  logfile LOG_DIR:'test.log'
  fields terminated by ','
  (
   emp_no,
   epm_name,
   hirte_date char date_format date mask 'yyyy-mm-dd',
   comm
  )
 )
 location('test.dat')
)
parallel
reject limit unlimited;

 注意: 如果在access parameters 中  注释一些没有用的代码,系统认为这是不符合规则的语句,所以产生错误。

         原因是我在测试的时候注释一些内容,所以查询的时候一直报错。

         然后在网上找了报错的原因,一般都是说这是创建目录和授权及目录和文件访问权限或文件数据问题或语法引起的问题,

   然后一个一个排除是否是这些原因引起错误,后来发现都不是这些因素。

         最后重新建表才发现是注释引起的错误。。。。。(抓狂啊)

例如:

access parameters
 (
  records delimited by newline
  badfile DATA_DIR:'zlc.bad'
  logfile DATA_DIR:'zlc.log'
  fields terminated by ','

  -- missing field values are null  这两句可选的,
 -- reject rows with all null fields

  (
   emp_no,
   epm_name,
   hirte_date char date_format date mask 'yyyy-mm-dd',
   comm
  )
 )

如图:

 

然后查看 表结构发现 访问参数里面有注释 ,如图

 

---把上面的注释去掉问题就解决了。


select * from ext_emp

 

转载于:https://www.cnblogs.com/jaysanshi/p/4345807.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 数据库,当你尝试执行存储过程时,可能会遇到 "ORA-01031: 权限不足" 错误。这个错误通常是由于当前用户缺少执行该存储过程所需的权限而引起的。解决这个问题的方法取决于你正在使用的环境和具体情况。 以下是一些可能的解决方案: 1. 确保用户具有执行存储过程的权限:检查当前用户是否具有执行存储过程所需的权限。你可以使用 `GRANT` 语句为用户授予相应的权限。 2. 检查存储过程所引用的对象的所有者和权限:确保存储过程引用的表、视图或其他对象的所有者和权限设置正确。如果存储过程引用了其他用户的对象,你需要确保当前用户具有访问这些对象的权限。 3. 检查用户的角色和权限:如果当前用户是通过角色进行授权的,而不是直接通过权限,你需要确保这些角色具有执行存储过程所需的权限。 4. 检查连接字符串和数据库链接配置:如果你使用的是连接池或者其他连接管理工具,确保连接字符串和数据库链接配置正确,并且具有足够的权限。 5. 检查数据库审计设置:在某些情况下,数据库审计设置可能会限制某些操作。检查数据库的审计设置,看看是否有任何限制或审计规则导致了权限不足的错误。 如果上述方法都无法解决问题,你可能需要进一步检查你的数据库和应用程序的配置,或者咨询数据库管理员或技术支持人员以获取更多帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值