Существует сервер БД Oracle, который содержит множество схем.
Некоторые из них содержат таблицу «КОНТРОЛЛЕРЫ» со столбцом «IPADDRESS».
Я получаю доступ к таблица dba_tab_cols , которая также содержит столбец «ВЛАДЕЛЕЦ».Видимо, "ВЛАДЕЛЕЦ" может быть ключевым словом.Это может вызвать проблемы.
Однако, когда я запускаю
SELECT owner from dba_tab_cols where column_name = 'IPADDRESS' and table_name = 'CONTROLLERS';
, я получаю желаемый вывод с именами схем. Но пытаюсь заставить его работатьвнутри некоторого динамического SQL внутри цикла не дали результатов, на которые я надеялся.
DECLARE
ownername varchar(100);
BEGIN
FOR schema_rec IN (
SELECT 'owner' into ownername from dba_tab_cols where column_name = 'IPADDRESS' and table_name = 'CONTROLLERS')
LOOP
DBMS_OUTPUT.put_line('ownername');
EXECUTE IMMEDIATE 'SELECT NAME, IPADDRESS from ' || ownername || '.CONTROLLERS where IPADDRESS=''X.X.X.X'';';
END LOOP;
END;
Это выдает мне следующее сообщение об ошибке: «неверное имя таблицы» в строке 8 иЯ не могу понять, что я сделал не так.Надеюсь, это просто проблема с синтаксисом.
Я уже пробовал разные вещи.Помещение владельца в одинарные и двойные кавычки и доступ к переменной цикла вместо «владельца» среди других.
РЕДАКТИРОВАТЬ: Это то, что я получил после возни немного:
SET SERVEROUTPUT ON
DECLARE
ownername varchar(100);
BEGIN
FOR schema_rec IN (
SELECT owner into ownername from dba_tab_cols where column_name = 'IPADDRESS' and table_name = 'CONTROLLERS')
LOOP
EXECUTE IMMEDIATE 'SELECT * from ' || schema_rec.owner || '.CONTROLLERS where IPADDRESS like ''1%''';
END LOOP;
END;
Он больше не выводит никаких ошибок, но и не выводит желаемый список.
Я не новичок в SQL, но в Oracle и благодарен за любые предложения / помощь.Спасибо