Как запросить конкретное имя столбца из нескольких таблиц из SQL - PullRequest
0 голосов
/ 17 мая 2018

Я хочу запросить column_name = object_no в нескольких таблицах (до 100 таблиц). Я использую Oracle SQL Developer.

Чтобы показать таблицы, которые не имеют column_name = object_no, я попытался с SQL-запросом ниже.

SELECT TABLE_NAME
FROM USER_TAB_COLUMNS
WHERE NOT COLUMN_NAME LIKE '%OBJECT_NO%'
ORDER BY COLUMN_ID;

Тем не менее, он показывает одну и ту же таблицу несколько раз и смешивается с таблицей, которая также имеет COLUMN_ID='OBJECT_NO'.

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Поскольку user_tab_columns имеет table_name и column_name в каждой строке, поэтому при выборе выбирается только строка с этими столбцами, а не другие строки с другими столбцами этой таблицы.

Один запрос, который вы можете использовать:

SELECT DISTINCT table_name
FROM user_tab_columns c
WHERE NOT EXISTS (
    SELECT 1
    FROM user_tab_columns
    WHERE column_name LIKE '%OBJECT_NO%'
        AND table_name = c.table_name
) 
ORDER BY table_name;

Другой способ работы может быть:

SELECT DISTINCT table_name
FROM user_tab_columns 
WHERE table_name NOT IN (
    SELECT table_name
    FROM user_tab_columns
    WHERE column_name LIKE '%OBJECT_NO%'
) 
ORDER BY table_name;
0 голосов
/ 17 мая 2018

Попробуйте это:

SELECT 
    DISTINCT TABLE_NAME 
FROM 
    USER_TAB_COLUMNS
WHERE 
    TABLE_NAME NOT IN 
    (
        SELECT 
            TABLE_NAME
        FROM 
             USER_TAB_COLUMNS
        WHERE COLUMN_NAME LIKE '%OBJECT_NO%'
     )
0 голосов
/ 17 мая 2018

Попробуйте это -

SET SERVEROUT ON;

BEGIN

FOR R IN (SELECT 'SELECT '||A.COLUMN_NAME||' FROM '||A.TABLE_NAME||' ' AS QRY FROM USER_TAB_COLUMNS A
WHERE COLUMN_NAME = 'OBJECT_NO')
LOOP
    EXECUTE IMMEDIATE USING R.QRY;
END LOOP;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...