从where子句中的txt文件中提取数据的脚本

时间:2015-03-21 17:52:18

标签: oracle variables parameters text-files toad

我正在尝试在 toad for oracle version 9.5 中编写一个sql脚本,运行时允许用户从输入参数/变量的c盘中的txt文件中选择数据。 oracle的版本是10g

1 个答案:

答案 0 :(得分:1)

听起来Oracle external directory非常适合工作。请记住,如果这是用户可以写入的文本文件,则此方法会遇到困难。用户将做一百件您从未相信可能导致错误的事情more

来自文章:

创建目录

授予读取权限,将目录data_dir写入your_user;

创建外部表

CREATE TABLE test_ext (
  test_code      VARCHAR2(5),
  test_name      VARCHAR2(50)
)
ORGANIZATION EXTERNAL (
  TYPE ORACLE_LOADER
  DEFAULT DIRECTORY ext_tab_data
  ACCESS PARAMETERS (
    RECORDS DELIMITED BY NEWLINE
    FIELDS TERMINATED BY ','
    MISSING FIELD VALUES ARE NULL
    (
      test_code      CHAR(5),
      test_name      CHAR(50)
    )
  )
  LOCATION ('test1.txt','test2.txt')
)
PARALLEL 5
REJECT LIMIT UNLIMITED;

然后从表中读取

SELECT *
    FROM   test_ext
    ORDER BY test_name;

编辑:您仍然可以使用不在数据库服务器上的目录来执行此操作,但需要更多工作,这对数据库安全性和数据质量构成了更大的风险。 这种方法也没有扩展。每次添加新用户时,您是否打算添加新目录?

允许Oracle访问位于另一台计算机上的文件的步骤(假设Windows操作系统)

  • 创建一个Windows或域用户,该用户将对您要访问的每个目录具有读取文件权限
  • 数据库服务器上的
  • 运行services.msc,并将运行Oracle数据库服务的用户更改为新域用户。将此用户添加到数据库服务器上名为ORA_DBA的本地组
  • 重新启动数据库以使更改生效
  • 使用类似// clientPc / sharedFolder
  • 的路径在数据库中创建目录
  • 向数据库用户授予读取权限
  • 在客户端计算机上授予读取该文件夹上的域用户
  • 验证连接by using UTLFILE以读取客户端PC上的示例文件