在SQL中(遗憾的是)LIKE由于数据库违反了几乎所有规范化规则,因此经常不得不使用" "条件.我现在无法改变它.但这与这个问题无关.
此外,我经常使用条件,例如WHERE something in (1,1,2,3,5,8,13,21)更好的可读性和SQL语句的灵活性.
在没有编写复杂的子选择的情况下,有没有可能将这两种方法结合起来?
我想要一些简单WHERE something LIKE ('bla%', '%foo%', 'batz%')而不是这样的东西:
WHERE something LIKE 'bla%'
OR something LIKE '%foo%'
OR something LIKE 'batz%'
Run Code Online (Sandbox Code Playgroud)
我在这里使用SQl Server和Oracle,但我很感兴趣,如果在任何RDBMS中都可以这样做.
在Oracle中,我有时会想要创建这些构造
SELECT * FROM TABLE(STRINGS('a', 'b', 'c'))
SELECT * FROM TABLE(NUMBERS(1, 2, 3))
Run Code Online (Sandbox Code Playgroud)
显然,我可以为上述声明我自己的类型.我可以选择TABLE和VARRAY.例如:
CREATE TYPE STRINGS AS TABLE OF VARCHAR2(100);
CREATE TYPE NUMBERS AS VARRAY(100) OF NUMBER(10);
Run Code Online (Sandbox Code Playgroud)
在这种特殊情况下,另一种解决方案是编写类似的东西
SELECT 'a' FROM DUAL UNION ALL
SELECT 'b' FROM DUAL UNION ALL
SELECT 'c' FROM DUAL
Run Code Online (Sandbox Code Playgroud)
但是我可能有更复杂的例子,我真的需要一个TABLE/ VARRAYtype.那么如果我的SQL运行在一个我无法创建类型的未知系统上,因为我可能没有必要的资助呢?
所以我的问题是: Oracle是否知道任何Oracle实例上可用的"匿名" TABLE/ VARRAY类型?类似于Postgres/H2/HSQLDB的简单ARRAY类型?
更新:如果这是相关的,我主要是从Java运行这个SQL.不需要向我解释PL/SQL,我只是在寻找匿名的SQL数组类型(即"匿名" 独立存储类型).如果它们根本不存在,答案是否定的