大家好,有个问题向大家请教。我们知道informix的unload和load的功能非常好用,其中unload的语法为:unload to 文件名 select查询语句;load的语法为:load from 文件名 insert into 表名。informix提供的unload功能可方便的实现将满足指定条件的数据导出;load功能可方便的实现将符合指定格式的数据插入到表中。那么在Oracle 10G中有无unload和load功能呢?还是只能自已写shell,实现类似的功能。

解决方案 »

  1.   

    oracle sql loader可以做, 但是也没informix那么方便
      

  2.   

    1.Oracle中使用exp可以导出单个表中的数据;
    exp test/test@user_string table=表名1 file=路径名\20081201表名1.dmp(dos下命令)
     
    2.Oracle中直接追加至某表是不行的,必须将表的内容使用imp导至某用户以后,
    才能在tableB中加入tableA中符合条件的数据:
    insert into tableB as select * from tableA where ......;
      

  3.   

    ORACLE中的SQLLDR可以实现上述功能,在UNIX环境上用SQLPLUS调用SQLLDR命令即可。
      

  4.   

    sleepzzzzz您好,您有更佳的答案吗?
      

  5.   

    后来我查了一下,可以通过下面的方式来实现:
    一、导出表数据:
        1、不带条件导出整表:$exp 用户名/密码@实例名 file=路径名/文件名.dmp tables={table1,table2}
        2、带条件导出某个表的数据:$exp 用户名/密码@实例名 file=路径名/文件名.dmp tables=表名 query=\" where语句 \" 或$exp 用户名/密码@实例名 file=路径名/文件名.dmp tables=表名 query=\" select X,X,X from 表名 where语句 \" ,如命令太长,可写一个shell实现。
        注意:第2种方式导出时有时会经常报下面类似的错误:
        LRM-00112: multiple values not allowed for parameter 'query'    EXP-00019: failed to process parameters, type 'EXP HELP=Y' for help
        EXP-00000: Export terminated unsuccessfully
        解决方法:在query条件的双引号和where语名中的某些运算符前加上\即可。例如:$exp 用户名/密码@实例名 file=路径名/文件名 tables=表名 query=\" select X,Y,Z from 表名 where X\>6 \"
    二、导入表数据
        imp 用户名\密码@实例名 file=路径名\文件名.dmp tables=表名 ignore=y
        注:如在导入之前该表已存在,如不想将此表删除,只想导入文件名.dmp中的数据,则需加上ignore=y不知我自已整理的东西是否正确,请大家指正。为响应sleepzzzzz的号召,那就先暂缓结贴吧,没别的意思,只是想多听听大家的想法,多学点东西。
      

  6.   

    oracle中的exp在加where条件的时候有bug。经常性的,如果直接“=”某个条件没问题,如果变成“>”则提示错误。导出内容到文件可以用oracle 的包,或者使用spool 文件名,spool off。
    导入文件内容可以使用sqlldr。