1

我正在尝试编写一个 plsql 查询,该查询允许我查询一组未存储在表中的已知值。假设这些已知值是以下字符串:

  • 美国广播公司
  • 定义
  • jkl

我想实现以下目标:


select * from [fill-in-the-blank] myvalues 
where not myvalues in 
(
    select id from dbtable
)

..我试图确定哪些已知值不在数据库表中。

约束

  • 这是 pl/sql (oracle)
  • 此解决方案必须在 Oracle PL/SQL Developer 中运行
  • 我只有架构的读取权限,所以我不能创建临时表。

有任何想法吗?

4

2 回答 2

5

您可以使用公用表表达式 (CTE) 来完成此操作:

with cte as (
    select 'abc' as id from dual
    union all
    select 'def' from dual
    union all
    select 'ghi' from dual
    union all
    select 'jkl' from dual
)
select * 
from cte
where not id in 
(
    select id from dbtable
)

事实上,您甚至可能根本不需要 CTE(尽管我发现它有助于提高可读性):

select * 
from (
    select 'abc' as id from dual
    union all
    select 'def' from dual
    union all
    select 'ghi' from dual
    union all
    select 'jkl' from dual
)
where not id in 
(
    select id from dbtable
)
于 2011-09-22T14:27:51.823 回答
0

我知道的旧线程,但没有人提到

select * from table(sys.dbms_debug_vc2coll('abc','def','ghi','jkl'));

当然,您不必使用sys.dbms_debug_vc2coll。可以使用以下方法列出可用的集合类型:

select c.owner, c.type_name, c.elem_type_name, c.length
from   all_coll_types c
where  c.coll_type = 'TABLE'
and    c.elem_type_name = 'VARCHAR2'
order by 1,2;
于 2016-08-01T15:00:09.057 回答