Я хочу запустить функцию проверки Oracle для каждой таблицы в базе данных, в которой есть подходящий столбец.
Проверка может быть запущена для одной таблицы просто:
SELECT
count (*)
FROM
Table_name t
Where
SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(t.Column_name, 0.005) <> 'TRUE';
Это прекрасно работает для отдельной таблицы, но, поскольку для тестирования имеется более 100, я хотел объединить ее с таблицей метаданных Oracle, используя подзапрос, и таким образом автоматизировать все это. Я придумал два варианта, но ни один из них не работает, я думаю, потому что у него возникают проблемы с передачей переменных изнутри подзапроса.
Мои две попытки:
SELECT TABLE_NAME tab, COLUMN_NAME col, (select count(*) from tab where sdo_geom.validate_geometry(tab.col, 0.005) <> 'TRUE')
From
All_Tab_Columns
where
owner = 'WCCDATA' and DATA_TYPE = 'SDO_GEOMETRY'
Что возвращает:
Ошибка SQL: ORA-00904: «TAB». «COL»: неверный идентификатор
00904. 00000 - «% s: неверный идентификатор»
и
SELECT count(*)
From
(SELECT
TABLE_NAME, COLUMN_NAME as col
FROM
All_Tab_Columns
where
owner = 'WCCDATA' and DATA_TYPE = 'SDO_GEOMETRY') subquery
WHERE sdo_geom.validate_geometry(subquery.col, 0.005) <> 'TRUE';
, который возвращает:
ORA-06512: в "MDSYS.SDO_GEOM", строка 2204
00942. 00000 - «таблица или представление не существует»
У кого-нибудь есть мысли? Благодаря.