![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ура! Без рефкурсора получаю набор данных
}|{yk © (2004-04-27 16:29:00)CREATE OR REPLACE
type ttablecolumns is OBJECT
(
COLUMN_NAME varchar2(32),
COLUMN_TYPE varchar2(32)
);
CREATE OR REPLACE
type ttablecolumns_tab is table of TTableColumns;
/
Функцию
CREATE OR REPLACE
FUNCTION get_table_cols(inTable_Name in varchar2,inOwner_Name in varchar2)
return TTableColumns_Tab
is
retval TTableColumns_Tab:=TTableColumns_Tab();
col_name varchar2(32);
col_type varchar2(32);
cursor c_TableCols is
select a.column_name,a.data_type from all_tab_columns a
where a.table_name=inTable_name
and a.owner=inOwner_Name;
begin
open c_TableCols;
loop
FETCH c_TableCols into col_name,col_type;
exit when c_TableCols%NOTFOUND;
retval.EXTEND;
retval (retval.LAST):=TTableColumns(col_name,col_type);
end loop;
close c_TableCols;
return retval;
end;
/
и
select column_name,column_type from table (cast(GET_TABLE_COLS('CUST1','CES') as TTableColumns_Tab));
ляпота
но кто нить знает как такую функцию использовать в ODAC?
}|{yk (2004-04-27 18:16:00) [1]Вот
триггер мне нужен для формирования xml-предстваления изменений
тело триггера во всех таблицах одинаковое, меняется только участок кода, ответственный за xml
FUNCTION GET_TRIGGER_LOG_BODY(inOwner_Name in varchar2)
return TTABLETRIGGERMAKET_TABLE
is
retval TTABLETRIGGERMAKET_TABLE:=TTABLETRIGGERMAKET_TABLE();
col_name varchar2(32);
col_type varchar2(32);
table_name varchar2(32);
trigger_maket_new varchar2(2000);
trigger_maket_old varchar2(2000);
trigger_maket varchar2(4000);
cursor c_TableCols is
select a.table_name,a.column_name,a.data_type from all_tab_columns a
where a.owner=inOwner_Name
and a.table_name in
(
select b.table_name from app_logged_tables b where b.is_logged='Y'
);
begin
trigger_maket:='';
trigger_maket_new:='IF (INSERTING OR UPDATING) THEN BEGIN ';
trigger_maket_new:=trigger_maket_new||'new_value :=''<operation type="'' || operation || ''" created='' || TO_CHAR (time_event) || ''><table table_name="">'';';
trigger_maket_old:='IF (DELETING OR UPDATING) THEN BEGIN ';
trigger_maket_old:=trigger_maket_old||'old_value :=''<operation type="'' || operation || ''" created='' || TO_CHAR (time_event) || ''><table table_name="">'';';
open c_TableCols;
loop
FETCH c_TableCols into table_name,col_name,col_type;
exit when c_TableCols%NOTFOUND;
trigger_maket_new:=trigger_maket_new||'new_value := new_value || '''||'<'||col_name||' type="'||col_type||'">''||new.'||col_name||'||''</'||col_name||'>'';';
trigger_maket_old:=trigger_maket_old||'old_value := old_value || '''||'<'||col_name||' type="'||col_type||'">''||old.'||col_name||'||''</'||col_name||'>'';';
end loop;
trigger_maket_new:=trigger_maket_new||'new_value := new_value || ''</table></operation>'';'||'END;END IF;';
trigger_maket_old:=trigger_maket_old||'old_value := old_value || ''</table></operation>'';'||'END;END IF;';
trigger_maket:=trigger_maket||trigger_maket_new||trigger_maket_old;
retval.EXTEND;
retval (retval.LAST):=TTABLETRIGGERMAKET(table_name,trigger_maket);
close c_TableCols;
return retval;
end;
Курдль (2004-04-27 17:16:00) [2]
> Так зачем делать навороченную ХП которая возвращает тоже
> самое, что и этот запрос ?
> И каким образом ты автоматизированно создаешь триггеры ?
Вот мне самому интересно, чем закончится эта эпоппея "универсального созидателя"? :)))
Vlad (2004-04-27 17:14:00) [3]
> }|{yk © (27.04.04 17:04) [2]
Не понял.
Получать поля и типы можно и без ХП, ты сам же запрос написал:
select a.column_name,a.data_type from all_tab_columns a
where a.table_name=:inTable_name and a.owner=:inOwner_Name;
Так зачем делать навороченную ХП которая возвращает тоже самое, что и этот запрос ?
И каким образом ты автоматизированно создаешь триггеры ?
}|{yk (2004-04-27 17:04:00) [4]чтобы получать поля, типы, и автоматизовано создавать триггеры
для хранения логов (сейчас делаю)
Vlad (2004-04-27 16:43:00) [5]Можно вопрос ?
Зачем нужны были такие извращения ?
Почему на клиенте с помощью SQL запроса нельзя было тоже самое получить ???