Нахождение каждой записи конкретной строки в базе данных - PullRequest
1 голос
/ 31 октября 2019

У меня есть база данных со столбцом «endpointid» во многих таблицах. Я ищу функцию поиска, которая бы находила каждую таблицу, содержащую конкретную конечную точку, чтобы написать запрос на удаление этой конечной точки. Я попытался удалить функцию, чтобы удалить ее из всех таблиц, но это не работает должным образом, так как конкретный конечный пункт может быть не во всех таблицах. Я знаю, что следующий запрос дает все таблицы с именем столбца:

select table_name from all_tab_columns where lower(column_name) like lower('%endpointid%');

Как расширить этот запрос для поиска конкретной записи endpointid?

1 Ответ

3 голосов
/ 31 октября 2019

Вот пример удаления строк с определенным значением endpointid:

CREATE TABLE mytest (
    endpointid NUMBER
);

INSERT INTO mytest VALUES ( 1 );
INSERT INTO mytest VALUES ( 2 );

DECLARE
    ep NUMBER := 2;
BEGIN
    FOR t_rec IN (
        SELECT
            table_name
        FROM
            all_tab_columns
        WHERE
            lower(column_name) LIKE lower('%endpointid%')
    ) LOOP
        EXECUTE IMMEDIATE 'delete from '
                          || t_rec.table_name
                          || ' where endpointid = :1'
            USING ep;
    END LOOP;
END;

Обратите внимание, что если эти таблицы имеют отношения внешнего ключа, это может завершиться ошибкой, поскольку не учитывает порядок расположенияссылки на таблицы. Если это необходимо, вам нужно будет структурировать запрос метатад, чтобы найти эти отношения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...