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

Вниз

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

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

Наверх




Память: 0.48 MB
Время: 0.051 c
14-1083240236
arp
2004-04-29 16:03
2004.05.23
Личные сайты


8-1078996212
sergn
2004-03-11 12:10
2004.05.23
Растровый алгоритм эллипса


3-1083058133
Aleksandr
2004-04-27 13:28
2004.05.23
Проблемы с фильтром на ADOQuery.


3-1082966607
PFR
2004-04-26 12:03
2004.05.23
Прерывание запроса к DB2 через ADOQuery


11-1072443366
xtz
2003-12-26 15:56
2004.05.23
Ув мастера помогите разобратся с использыванием VMHSyntaxEdit