[英]Oracle Subquery
我需要设计一个子查询来选择列中具有匹配值的行。
例
Select *
from person
where first_name in ('Java','SQL','Oracle');
但是,此括号内的列表可能很大,最多可以有30,000个值。 我将从文件中读取值,并将其传递到此括号内。 但是,我认为括号内可以提供的值数量可能有限制。 是否有一个最佳解决方案来解决这种情况,而无需创建新表并向其中加载数据?
编辑:感谢您的答复。 以下查询是要考虑的一个选项-
Select *
from person
where first_name like 'Java'
or first_name like 'SQL'
or first_name like 'Oracle';
谢谢。
我同意乔纳森(Jonathan)的观点,认为拥有30000个值不是解决问题的办法,而他的解决方案是一个好方法。 但是这是另一个想法,Oracle具有一个很好的功能,称为“外部表”。
使用外部表,您可以将文件视为表。 如果文件结构良好(例如CSV),则可以轻松使用此功能。
Google“ Oracle外部表”,您会发现很多信息和示例,但是对于初学者来说,请阅读以下内容 :
基本上,您将需要一个目录对象来告诉Oracle文件所在的位置,然后您将创建外部表,也许如下所示:
create directory DIR_MYFILE as '/my_source_dir/';
create table EXT_MY_FILE
(
some_id number(8),
some_value varchar2(100)
)
organization external
( default directory DIR_MYFILE
access parameters
( records delimited by newline
fields terminated by ','
)
location ('my_file.csv')
);
在查询中使用此表:
select * from person where first_name in (select some_value from EXT_MY_FILE);
编辑:看到APC的评论,他有一个很好的观点。
如果可以在PL / SQL中处理文件,则流水线函数可能是另一个选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.