0

私は2種類のテーブルを持っています。最初の並べ替えにはTBL$プレフィックスがあり、2 番目の並べ替えにはプレフィックスがありLOG$ます。テーブルがあればLOG$TABLE_NAMEテーブルもありTBL$TABLE_NAMEます。LOG$テーブルはテーブルから生成されるためTBL$です。問題は、oracles テーブルからすべてのユーザー テーブルを検索する場合ですUSER_TABLESTBL$2つのパラメーターを持つテーブルのみを名前で検索したい。1 つ目は名前で、2 つ目は検索されたテーブルに対応するテーブルがあるかどうかを示す文字列 ('YES' または 'NO) ですLOG$。この 2 番目のパラメーターがないと、クエリは次のようになります。

SELECT ut.table_name AS id,
       utc.comments  AS comments
  FROM user_tables ut
  LEFT JOIN user_tab_comments utc
    ON ut.table_name = utc.table_name
 WHERE SUBSTR(UPPER(ut.table_name), 1, 4) = 'TBL$'
   AND TRIM(UPPER(ut.table_name)) LIKE TRIM(UPPER('%'|| :table_name ||'%'))

したがって、この 2 番目のパラメーターをクエリに反復処理するのを手伝っていただければ、それは素晴らしいことです。

4

1 に答える 1

2

左外部自己結合を実行して、存在を確認できます。

SELECT
  ut.table_name AS id
, CASE WHEN ut_log.table_name IS NOT NULL THEN 'YES' ELSE 'NO' END has_log
FROM user_tables ut
LEFT JOIN user_tables ut_log ON ut_log.table_name = replace(ut.table_name, 'TBL$', 'LOG$')
WHERE SUBSTR(UPPER(ut.table_name), 1, 4) = 'TBL$'
于 2012-12-17T13:20:50.117 に答える