我有一个包含多行的文本文件。我想用PL/SQL从每一行的相同位置选择一个子串。我该怎么做呢?
示例:
这是我的文本文件:
ABCDEFGHI
JKLMNOPQR我希望使用PL/SQL提取每一行的第2-4列,因此我的结果应该如下所示:
BCD
KLM发布于 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
例如:
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
发布于 2016-04-15 15:04:02
1)首先,您需要为Oracle用户创建Oracle目录,该用户将读取文件或为现有用户授予权限:
CREATE OR REPLACE DIRECTORY file_dir AS '/your/directory/';权限:
GRANT READ ON DIRECTORY file_dir TO YOU_USER;2)将文件复制到'/ your /directory/‘文件夹
3)运行代码,如下所示:
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;
/https://stackoverflow.com/questions/36639809
复制相似问题