Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

Ура! Без рефкурсора получаю набор данных   Найти похожие ветки 

 
}|{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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.059 c
1-1084329754
Юрец2
2004-05-12 06:42
2004.05.23
Как уменьшить шрифт


1-1083826800
xman
2004-05-06 11:00
2004.05.23
MEMO


3-1083011474
Volodya_
2004-04-27 00:31
2004.05.23
Resync


3-1082970542
Ant
2004-04-26 13:09
2004.05.23
Графики Ганнта


1-1084210589
Helpme
2004-05-10 21:36
2004.05.23
Найдите ошибку в этом коде