Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

Функции...Оракл   Найти похожие ветки 

 
}|{yk ©   (2004-04-27 15:20) [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(Table_Name in varchar2,Owner_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=Table_name
          and a.owner=Owner_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;
/
Функция рабочая, запускается по хитрому из SQL Navigatora. Но когда я вызываю ее из запроса
select * from table (cast(GET_TABLE_COLS("CUST1","CES") as TTableCols_Tab));
получаю ошибку ora-22905
Ее решение Use CAST to cast the item to a nested table type.
Но я же и так применяю cast. Что делать?


 
Курдль ©   (2004-04-27 15:26) [1]


> select * from table (cast(GET_TABLE_COLS("CUST1","CES")
> as TTableCols_Tab));

Это круто! :)

Какими компонентами доступаешься?
Если DOA, то могу подсказать. В

TOracleDataset.SQL.Text :=
"begin
 :result := ИМЯ_ФУНКЦИИ;
end;"
Variables/Type := Cursor;

Тогда этот датасет начинает принимать набор данных, выданный функцией.


 
roottim   (2004-04-27 16:10) [2]

в редких случаях применяю, но можно и так... о целесообразности разговор заводить не буду
вот тебе тестовый пример.. попробуй если надо
spool !Create.log

prompt
prompt Creating package TEST
prompt =====================
prompt
CREATE OR REPLACE PACKAGE TEST IS

TYPE TTESTREC IS  RECORD (
  COLUMN_NAME VARCHAR2(32),
  COLUMN_TYPE VARCHAR2(32)
  );

TYPE TTESTTABLE IS TABLE OF TTESTREC;

FUNCTION GET_TABLE_COLS(P_TABLE_NAME IN VARCHAR2, P_OWNER_NAME IN VARCHAR2) RETURN TTESTTABLE PIPELINED;

END TEST;
/

prompt
prompt Creating package body TEST
prompt ==========================
prompt
CREATE OR REPLACE PACKAGE BODY TEST IS

FUNCTION GET_TABLE_COLS(P_TABLE_NAME IN VARCHAR2, P_OWNER_NAME IN VARCHAR2) RETURN TTESTTABLE PIPELINED
IS
BEGIN
FOR C IN (
 SELECT A.COLUMN_NAME, A.DATA_TYPE FROM ALL_TAB_COLUMNS A
   WHERE A.TABLE_NAME = P_TABLE_NAME
         AND A.OWNER = P_OWNER_NAME
)
LOOP  PIPE ROW (C); END LOOP;        
RETURN;
END;

END TEST;
/

spool off


Ну а дальше например так
slect * from table(test.get_table_cols("address", "addr"))
и еще.. данная штука будет работает в 9,2... не ниже..



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.043 c
4-1081453654
cuper
2004-04-08 23:47
2004.05.23
События в чужом окне


4-1081318448
DennisLNC
2004-04-07 10:14
2004.05.23
Mutex


7-1081355785
bob5
2004-04-07 20:36
2004.05.23
Установка принтера по умолчанию


1-1084287680
Eugene30
2004-05-11 19:01
2004.05.23
Как программно (в run-time) получить список всех форм проекта?


3-1083218629
direqtor
2004-04-29 10:03
2004.05.23
Ошибка при работе с отчетами Access





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский