首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PL/SQL从文本文件中提取列

PL/SQL从文本文件中提取列
EN

Stack Overflow用户
提问于 2016-04-15 14:34:06
回答 2查看 1K关注 0票数 0

我有一个包含多行的文本文件。我想用PL/SQL从每一行的相同位置选择一个子串。我该怎么做呢?

示例:

这是我的文本文件:

代码语言:javascript
复制
ABCDEFGHI
JKLMNOPQR

我希望使用PL/SQL提取每一行的第2-4列,因此我的结果应该如下所示:

代码语言:javascript
复制
BCD
KLM
EN

回答 2

Stack Overflow用户

发布于 2016-04-15 14:58:28

根据您的目标,您可以在Oracle中使用许多选项来处理文件。

第一个选项

假设您想要做的就是读取文件,然后进行一些额外的处理

1)使用UTL_FILE http://docs.oracle.com/database/121/ARPLS/u_file.htm#ARPLS72681读取文件

2)使用substring函数提取第2-4列

例如select substr('ABCDEFGHI',2,3) from dual;

第二个选项

如果您直接从文件插入到表中,并且您所需要的只是格式化,我建议您使用SQL Loader

例如:

代码语言:javascript
复制
load data infile 'data.csv'
append into table mytable
fields terminated by ","
(
str "substr(:str,2,3)",
)

第3个选项

如果您希望直接访问SQL中的文件,并在视图中使用它的-for示例,那么您可能会从外部表中获益。

http://docs.oracle.com/database/121/SUTIL/GUID-ACF1D3AA-1D61-4682-AEC5-42C944756E12.htm#SUTIL1357

票数 1
EN

Stack Overflow用户

发布于 2016-04-15 15:04:02

1)首先,您需要为Oracle用户创建Oracle目录,该用户将读取文件或为现有用户授予权限:

代码语言:javascript
复制
CREATE OR REPLACE DIRECTORY file_dir AS '/your/directory/';

权限:

代码语言:javascript
复制
GRANT READ ON DIRECTORY file_dir TO YOU_USER;

2)将文件复制到'/ your /directory/‘文件夹

3)运行代码,如下所示:

代码语言:javascript
复制
    Create or Replace PROCEDURE Readfile is
    fileForRead UTL_FILE.FILE_TYPE;
    line VARCHAR2(200); 
    BEGIN
    f := UTL_FILE.FOPEN(file_dir ,'your_file.txt','R');
      IF UTL_FILE.IS_OPEN(fileForRead) THEN
        LOOP
          BEGIN
            UTL_FILE.GET_LINE(fileForRead,line);
            IF line IS NULL THEN
              EXIT;
            END IF;
            line := substr(line, 2,3);
      END LOOP;
      COMMIT;
      END IF;
     END;
/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36639809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档