san1185
Дата: 16.03.2011 07:37:51
Коллеги, помогите советом опытом.
Столкнулся с такой задачей: "необходимо проверить все поля (строковые) каждой таблицы в определенной схеме БД, на соответствие строковой константе".
Подскажите наиболее верный способ решения данной задачи.
Сам пытался реализовать через курсив - не получается. Получаю ошибку: "ORA-00904: недопустимый идентификтор" :(.
Спасибо!
Вячеслав Любомудров
Дата: 16.03.2011 07:44:29
Естественно, болдом надо
Ты эта, покажи, как пробовал-то
san1185
Дата: 16.03.2011 07:49:09
Сделал следующее:
create table temp_carr_tables as
select t.OWNER, t.TABLE_NAME, t.COLUMN_NAME, 'pacf2.amdocs' as dblink
--into owner, table_name, column_name, dblink
from sys.all_tab_columns@pacf2.amdocs t
where t.data_type in ('CHAR', 'NCHAR', 'CLOB', 'NCLOB', 'VARCHAR2', 'NVARCHAR2', 'LONG');
Затем создал тестовый скрипт:
declare
-- Non-scalar parameters require additional processing
owner varchar2(4000);
table_name varchar2(4000);
column_name varchar2(4000);
dblink varchar2(4000);
cursor cur is (
select t.OWNER, t.TABLE_NAME, t.COLUMN_NAME, t.dblink
into owner, table_name, column_name, dblink
from temp_carr_tables t
/*
select t.OWNER, t.TABLE_NAME, t.COLUMN_NAME, 'pacf2.amdocs'
into owner, table_name, column_name, dblink
from sys.all_tab_columns@pacf2.amdocs t
where t.data_type in ('CHAR', 'NCHAR', 'CLOB', 'NCLOB', 'VARCHAR2', 'NVARCHAR2', 'LONG')
--*/
);
begin
open cur;
loop
fetch cur into owner, table_name, column_name, dblink;
exit when cur%NOTFOUND;
--/*
EXECUTE IMMEDIATE '
update temp_carr_tables t
set t.is_like_car = chr(65)
where t.owner = '||owner||'
and t.table_name = '||table_name||'
and t.table_column = '||column_name||'
and t.dblink = '||dblink||'
and exists (
select *
from '||owner||'.'||table_name||'@'||dblink||'
where upper('||column_name||') like chr(37)||chr(67)||chr(65)||chr(82)||chr(37)
)';
commit;
--*/
/*
EXECUTE IMMEDIATE '
insert into temp_carr
select '||owner||','||table_name||','||column_name||', '||dblink||'
from '||owner||'.'||table_name||'@'||dblink||'
where upper('||column_name||') like chr(37)||chr(67)||chr(65)||chr(82)||chr(37)';
commit;
--*/
end loop;
close cur;
end;
PooH_2
Дата: 16.03.2011 08:49:31
and exists (
select *
from '||owner||'.'||table_name||'@'||dblink||'
where upper('||column_name||') like chr(37)||chr(67)||chr(65)||chr(82)||chr(37)
)';
"Нет, сынок, это фантастика" ©реклама
копайте в сторону динамического SQL.
san1185
Дата: 16.03.2011 09:16:40
Ребята, ну не помогают данные рекомендации :(.
Пожалуйста, дайте что-нибудь посущественнее. Изначально надеялся, получить ответ от того, кому уже приходилось решать подобную задачу. Чтобы не изобретать велосипед заново. Уверен на 80%,что приведенный мною метод - плохой и возможно нерабочий ...
Попробуйте сами решить данную задачу: найти поля всех таблиц определенной схемы в БД, которые содержат значение 'заданной константы'. Как бы вы подошли к решению данной задачи?