1

テーブルに格納されていない一連の既知の値をクエリできる plsql クエリを作成しようとしています。これらの既知の値が次の文字列であるとします。

  • abc
  • デフォルト
  • jkl

次のようなことを達成したいと思います。


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

..これらの既知の値のどれがデータベーステーブルにないかを確認しようとしています。

制約

  • これは pl/sql (オラクル)
  • このソリューションは、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 に答える