我是oracle和plsql的新手,所以请耐心等待。
我有一个文件TYPES.txt
,
id,name,values
1,aaa,32
2,bbb,23
3,cvv,12
4,fff,54
我的数据库中还有一个表,PARTS.ATTRIBUTES
id,name,props,crops
1,aaa,100,zzzz
2,bbb,200,yyyy
3,cvv,300,xxxx
4,fff,400,wwww
5,sasa,343,gfgg
6,uyuy,897,hhdf
我想根据列INNER JOIN
对文件TYPES
和ATTRIBUTES
进行name
。现在,我已经通过最初将文件TYPES
加载到临时表中然后在临时表和INNER JOIN
表之间执行ATTRIBUTES
来完成此操作。
但是我想知道是否可以在TYPES
文件和ATTRIBUTES
表之间进行INNER JOIN而不使用临时表。 < / p>
我知道我可以使用以下脚本加载文件并获取相应的行:
declare
file utl_file.file_type;
line varchar2(500);
begin
file :=utl_file.fopen('USER_DIR','TYPES.txt','r');
loop
utl_file.get_line(file ,line);
dbms_output.put_line(line);
end loop;
exception
when others then
utl_file.fclose(file);
end;
有人可以向我解释如何在文件内容和数据库表之间进行连接吗?
P.S。文件TYPES.txt
是动态生成的,并且可以在不同时间具有不同数量的列。
答案 0 :(得分:1)
一种更简洁的方法是使用EXTERNAL TABLE
。
使用这样的create语句创建TYPES_external
表。
CREATE TABLE TYPES_external (
id NUMBER(5),
name VARCHAR2(50),
Values VARCHAR2(50)
)
ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY USER_DIR
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
FIELDS TERMINATED BY ','
MISSING FIELD VALUES ARE NULL
(
id NUMBER(5),
name VARCHAR2(50),
Values VARCHAR2(50)
)
)
LOCATION ('TYPES.txt','TYPES.txt')
)
PARALLEL 5
REJECT LIMIT UNLIMITED;
创建后,您可以像使用此外部表(TYPES_external
)一样使用
使用任何数据库表进行select
操作。