Форум: "Базы";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
ВнизУра! Без рефкурсора получаю набор данных Найти похожие ветки
← →
}|{yk © (2004-04-27 16:29) [0]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?
← →
Vlad © (2004-04-27 16:43) [1]Можно вопрос ?
Зачем нужны были такие извращения ?
Почему на клиенте с помощью SQL запроса нельзя было тоже самое получить ???
← →
}|{yk © (2004-04-27 17:04) [2]чтобы получать поля, типы, и автоматизовано создавать триггеры
для хранения логов (сейчас делаю)
← →
Vlad © (2004-04-27 17:14) [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;
Так зачем делать навороченную ХП которая возвращает тоже самое, что и этот запрос ?
И каким образом ты автоматизированно создаешь триггеры ?
← →
Курдль © (2004-04-27 17:16) [4]
> Так зачем делать навороченную ХП которая возвращает тоже
> самое, что и этот запрос ?
> И каким образом ты автоматизированно создаешь триггеры ?
Вот мне самому интересно, чем закончится эта эпоппея "универсального созидателя"? :)))
← →
}|{yk © (2004-04-27 18:16) [5]Вот
триггер мне нужен для формирования 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;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.03 c