Как найти все таблицы, имеющие столбец с типом данных CHAR и имеющие числовое значение c в нем? - PullRequest
0 голосов
/ 13 марта 2020

Я хочу найти все таблицы, в которых есть столбцы с типом данных char, но в них есть запись цифра c, например, если есть таблица X со столбцом VALID_FLAG CHAR(1), я должен проверить, имеет ли этот столбец значение 0 или 1 в нем?

Понятия не имею, пожалуйста, руководство.

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Вы можете воспользоваться xmlquery и найти желаемый результат в одном запросе следующим образом:

WITH DATAA AS(select /*+ MATERIALIZE */ owner, table_name, column_name,
  to_number(xmlquery('/ROWSET/ROW/C/text()'
    passing xmltype(dbms_xmlgen.getxml(
      'select count(1) as c '
      || 'from ' || table_name || ' WHERE ' || COLUMN_NAME || ' IN (''0'',''1'')'))
  returning content)) as c
from user_tab_columns
WHERE
    DATA_TYPE = 'CHAR')
SELECT * FROM DATAA
WHERE C > 0;

Cheers !!

1 голос
/ 13 марта 2020

Вы не можете достичь этого с помощью одного запроса. Вы можете написать процедуру PL / SQL в oracle, которая будет выполнять следующие действия:

  1. Получить список таблиц со столбцами, для которых тип данных CHAR:
select table_name,COLUMN_NAME,DATA_TYPE from ALL_TAB_COLUMNS where data_type='CHAR'
and OWNER='OWNER_NAME';
Тогда вы можете поставить чек на 1 или 0:
select count(*) from table_name where column_name in ('1','0');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...