【问题标题】:Oracle DB: query using file in where clauseOracle DB:在 where 子句中使用文件进行查询
【发布时间】:2014-05-13 07:06:58
【问题描述】:

我刚刚通过链接using input from a text file for WHERE clause 查询带有输入文件的表。

但它不适用于 Oracle DB 11g。有什么方法可以在 Where 子句中使用文件输入查询 OIM 表。

【问题讨论】:

  • 您知道这个问题是针对 SQL Server 的,对吧?什么是 OIM?文件是在客户端机器上还是在数据库服务器上;它可以移动到服务器上 Oracle 认可的目录吗?如果是这样,您可以使用external table 来解决这个问题……努力为这种情况找到一个完全相同的问题。
  • 感谢外部表的工作。我实际上正在为指针而苦苦挣扎。 BULK Insert 不适用于 Oracle DB。抱歉,OIM 表含糊不清。它在 Oracle 身份管理器模式中的预定义表集。

标签: oracle oracle11g


【解决方案1】:

您可以使用external table 来引用平面文件中的数据作为查询的一部分。

在您链接到的问题的示例中,等效内容类似于:

create table employeenames (first_name varchar2(20))
organization external (
  type oracle_loader
  default directory my_dir
  location ('myfile.txt')
);

如果文件包含名字,您可以找到所有具有这些名字的员工:

select e.employee_id, e.first_name, e.last_name, e.salary 
from employeenames en
join employees e on e.first_name = en.first_name;

如果文件只包含单个条目 David,我正在查看 HR 架构:

EMPLOYEE_ID FIRST_NAME           LAST_NAME                     SALARY
----------- -------------------- ------------------------- ----------
        165 David                Lee                             6800 
        151 David                Bernstein                       9500 
        105 David                Austin                          4800 

但该文件必须位于数据库服务器上,并且位于 Oracle 有权访问的文件系统目录中,并且由 Oracle DIRECTORY 对象表示,该对象指向该文件系统目录,并且外部的所有者表有读取权限。因此,假设这是从 SCOTT 帐户运行的,您之前必须以 DBA 身份执行此操作:

create or replace directory my_dir as 'c:\';
grant read on directory my_dir to scott;
grant write on directory my_dir to scott;

当然,指向c:\ 可能不是一个好主意,您通常会有一个专门用于此的目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-25
    • 2017-02-25
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    相关资源
    最近更新 更多