有没有.字符串.
让我们说吧'foo', 'bar', 'chi', 'xyz', 'moo'.
我想形成一个虚拟表,比如说X用于与另一个表连接,比如Y,其中一个列中包含那些字符串,即名称.尝试通过运行以下查询来提取数据.
select Y.name, Y.age
from(**select ('foo', 'bar', 'chi', 'xyz', 'moo') as name**) X
left join Y on X.name = Y.name;
我知道**中的文本不是正确的SQL语法,但寻找类似于必须在Oracle SQL中运行查询的东西.
任何建议或想法最受欢迎.
使用VARRAY或集合并加入COLUMN_VALUE伪柱:
SELECT y.*
FROM TABLE( SYS.ODCIVARCHAR2LIST( 'foo', 'bar', 'chi', 'xyz', 'moo' ) ) t
INNER JOIN -- or LEFT OUTER JOIN
y
ON t.COLUMN_VALUE = y.name;
Run Code Online (Sandbox Code Playgroud)
SYS.ODCIVARCHAR2LIST 是几个预先存在的VARRAY之一,但您可以轻松创建自己的集合:
CREATE TYPE Char3List IS TABLE OF CHAR(3)
/
SELECT y.*
FROM TABLE( Char3List( 'foo', 'bar', 'chi', 'xyz', 'moo' ) ) t
INNER JOIN -- or LEFT OUTER JOIN
y
ON t.COLUMN_VALUE = y.name;
Run Code Online (Sandbox Code Playgroud)
或者,使用集合(但不是VARRAY类似SYS.ODCIVARCHAR2LIST),您甚至不需要使用连接:
SELECT *
FROM y
WHERE name MEMBER OF Char3List( 'foo', 'bar', 'chi', 'xyz', 'moo' );
Run Code Online (Sandbox Code Playgroud)
您甚至可以将其作为外部语言的数组传递给bind参数.