Главная страница
    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
1-1084267650
Andrey79
2004-05-11 13:27
2004.05.23
Шрифт для Code Editor


7-1082150125
kat
2004-04-17 01:15
2004.05.23
Не передаются параметры Rundll32.exe


3-1083290855
pulp
2004-04-30 06:07
2004.05.23
Проблема при организации MDI+MIDAS.


1-1083956667
LAnd
2004-05-07 23:04
2004.05.23
Подсветка текста компоненты SynHighLighters (SynEdit, SynMemo)


14-1083736984
@lex
2004-05-05 10:03
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский