Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.034 c
3-1083144970
sniper
2004-04-28 13:36
2004.05.23
Удаление повторяющихся записей в таблице


14-1083589784
Igor_thief
2004-05-03 17:09
2004.05.23
XML


7-1081868205
Paladin
2004-04-13 18:56
2004.05.23
Выключение компа


14-1083310456
Vlad Oshin
2004-04-30 11:34
2004.05.23
задача. Не понял как решается.


14-1083160290
copyr25
2004-04-28 17:51
2004.05.23
Back2Life v. either 1.0 or 1.01





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский