【问题标题】:Oracle: How to Save result of query on Unix layerOracle:如何在 Unix 层保存查询结果
【发布时间】:2011-10-21 14:33:56
【问题描述】:

如何将查询结果保存到 Unix 文件系统。如果可能的话,我需要一步一步的过程。

我做了什么。 在 Unix 文件系统中创建了一个目录。 在 oracle 中创建了一个目录,将其指向 Unix 文件系统目录。

试图将结果假脱机到 Unix 文件系统,但由于某些原因它不起作用。

如果任何 1 有帮助将不胜感激。 在客户端 windows xp 上工作。 环境:oracle 11g 和 应用:Oracle 11 的 TOAD。

【问题讨论】:

  • “unix 层”到底是什么意思?听起来像是一个印有 UNIX 标志的垫子……
  • @VladLazarenko:我认为unix 层 可能意味着unix 文件系统。 OP 似乎也希望将结果保存到 server 文件系统而不是 client 文件系统,因为他创建了一个 Oracle 目录对象。

标签: sql unix filesystems oracle11g


【解决方案1】:

您可以使用外部表卸载。这将以数据泵格式创建查询结果的转储文件(您可以使用 impdp 导入此文件)
为此,请创建类型为 ORACLE_DATAPUMP 的外部表。

这是一个例子:

SQL> 
SQL> 
SQL> 
SQL> CREATE TABLE emp_ext
ORGANIZATION EXTERNAL
(
 TYPE ORACLE_DATAPUMP
 DEFAULT DIRECTORY EXPORT
LOCATION ( 'emp_ext.dmp' )
 )
 AS SELECT * FROM SCOTT.EMP;  

Table created.

SQL> select count(*) from emp_ext;

  COUNT(*)
----------
        18

SQL> !ls /export/home/oracle/export     
 EMP_EXT_13392.log  emp_ext.dmp

【讨论】:

    【解决方案2】:

    第一。在 Unix 文件系统中创建目录(不在你的名字下,否则它不会工作)然后 chmod 777 <dir_path> .

    第二次在oracle中创建目录

    CREATE OR REPLACE DIRECTORY <dir_name> AS '<dir_path>';
    

    现在来测试一下

    create or replace procedure  WRITEFILE is
           fh UTL_FILE.FILE_TYPE;                                                   
           dir VARCHAR2(30) := '<dir_name>';                                                        
           name VARCHAR2(30)  := 'test1';                                                       
        begin                                                                    
    
           fh := UTL_FILE.FOPEN(dir, name, 'w');                                    
           UTL_FILE.PUT_LINE(fh, 'bla bla');                                         
           UTL_FILE.FCLOSE(fh);
        end;
    

    【讨论】:

      猜你喜欢
      • 2011-02-02
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 2020-04-17
      相关资源
      最近更新 更多