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

Вниз

Функции возвращающие набор данных в Оракле   Найти похожие ветки 

 
}|{yk ©   (2004-04-27 13:26) [0]

Что-то не совсем ясно как их создавать
Вот кусок кода
declare
COLUMN_NAME varchar2(32);
COLUMN_TYPE varchar2(32);

type t_TABLE_COLUMNS_REC IS RECORD (
COLUMN_NAME varchar2(32),
COLUMN_TYPE varchar2(32)
);
type t_TABLE_COLUMNS_REF is REF CURSOR return t_TABLE_COLUMNS_REC;

cursor COLUMNS_TABLE is
select a.column_name,a.data_type from all_tab_columns a
where UPPER(a.table_name)=UPPER("cust1")
and a.owner="CES";
begin
open COLUMNS_TABLE;
 loop
 FETCH COLUMNS_TABLE INTO COLUMN_NAME,COLUMN_TYPE;
 exit when COLUMNS_TABLE%NOTFOUND;
end loop;
close COLUMNS_TABLE;  
end;

А как это преобразовать в функцию?


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

Мы тут недавно дискутировали про ref-cursor-ы. Там все написано.


 
Vlad ©   (2004-04-27 13:28) [2]


> }|{yk ©   (27.04.04 13:26)  

Ну и где ты тут заметил что возвращается курсор ?
Если хочешь возвращать курсор  на клиента, читай про REF CURSOR


 
}|{yk ©   (2004-04-27 13:39) [3]

А так

declare
type t_TABLE_COLUMNS_REF is REF CURSOR;
tables_cols t_TABLE_COLUMNS_REF;
begin
open tables_cols for
select a.column_name,a.data_type from all_tab_columns a
where UPPER(a.table_name)=UPPER("cust1")
and a.owner="CES";
end;

курсор клиенту возвращается?


 
Vlad ©   (2004-04-27 13:46) [4]


> }|{yk ©   (27.04.04 13:39) [3]
> А так

Не нужно гадать на кофейной гуще, почитай доки, там все написано.
Вкратце так: функция должна возвращать значение типа Ref Cursor.
Вот и создай такую функцию.


 
}|{yk ©   (2004-04-27 13:51) [5]

FUNCTION GETTABLECOLUMNS(
p_Table_Name all_tab_columns.table_name%TYPE,
p_Owner all_tab_columns.owner%TYPE
)
return t_TABLE_COLUMNS_REF is
type t_TABLE_COLUMNS_REF is REF CURSOR;
tables_cols t_TABLE_COLUMNS_REF;
begin
open tables_cols for
select a.column_name,a.data_type from all_tab_columns a
where UPPER(a.table_name)=UPPER(p_Table_Name)
and a.owner=p_Owner;

end;

Но тип вед должен быть объявлен до создания функции. Не пойму чего-то я. Инвалидный объект получается


 
Vlad ©   (2004-04-27 13:54) [6]


> }|{yk ©   (27.04.04 13:51) [5]

Во-первых эта функция ничего не возвращает.
Во-вторых тип должен быть объявлен до объявления функции, например в спецификации пакета


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

Действующий простой пример:

create or replace package TEST_PACKAGE is
 type TMyRefCursor is ref cursor return PR_SUBJECTS%ROWTYPE;
 function TEST_FUNCTION return TMyRefCursor;
end TEST_PACKAGE;
/

create or replace package body TEST_PACKAGE is
 function TEST_FUNCTION return TMyRefCursor is
 rc TMyRefCursor;
 begin
   open rc for select * from PR_SUBJECTS;
   return rc;  
 end;
end TEST_PACKAGE;
/



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

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

Наверх





Память: 0.46 MB
Время: 0.033 c
9-1043712780
SLKnot"
2003-01-28 03:13
2004.05.23
Glscene Непрохождение сквозь стены


7-1081869416
ZSD
2004-04-13 19:16
2004.05.23
Рабочий стол


3-1082714737
Mim1
2004-04-23 14:05
2004.05.23
Interbase - DBExpress vs IBDatabase


4-1081046081
Prov
2004-04-04 06:34
2004.05.23
SW_HIDE


14-1083311974
sapsi
2004-04-30 11:59
2004.05.23
Мобильники - нужны ли они?





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