Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Администрирование Oracle Database:
- Установка и настройка базы данных
- Обновление, применение патчей
- Оптимизация, настройка производительности
- Обучение, подготовка персонала, оптимизация
  • Страница:
  • 1
  • 2

ТЕМА:

Oracle: Использование функции в select 12 года 8 мес. назад #3400

Можно ли результат функции, возвращающей ref cursor, использовать в select? Что-то вроде select * from FunctionName(1,2,3) ?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Использование функции в select 12 года 8 мес. назад #3401

Можно (и нужно) так:

select FunctionName(1, 2, 3) from dual;



Через ODAC/DOA/ADO результирующий курсор можно юзать так:
Query.First

while NOT Query.EoF do

   begin

      Query.Fields.Field[i].AsТип бла-бла-бла;         // Это 2 варианта

      Query.Fields.FieldByName('имя') бла-бла-бла;  // одного и того же

      Query.Next

   end;

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Vladimir.

Re: Oracle: Использование функции в select 12 года 8 мес. назад #3402

DROP TYPE pages_object;

DROP TYPE pages_table;

DROP FUNCTION GetPagesCursor;



CREATE TYPE pages_object AS OBJECT

(

 page_serial NUMBER(16),

 name VARCHAR2(15),

 page_file VARCHAR2(255),

 sequritylevel NUMBER(3),

 uses NUMBER(16)

 );



CREATE TYPE pages_table AS TABLE OF pages_object;



CREATE OR REPLACE FUNCTION GetPagesCursor RETURN pages_table IS



 CURSOR c_pages IS

  SELECT page_serial, UPPER(name), pagefile, securitylevel, uses FROM pages;



 v_pages pages%ROWTYPE;

 t_pages pages_table := pages_table();

 n INTEGER:=0;

BEGIN

 FOR v_pages IN c_pages LOOP

  n:=n+1;

  t_pages.EXTEND;

  t_pages(n):=v_pages;

 END LOOP;

RETURN t_pages;

END GetPagesCursor;





-- Использование


SELECT

  page_serial,

  name

FROM

TABLE( CAST(GetPagesCursor() AS pages_table));

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Использование функции в select 12 года 8 мес. назад #3403

Пробую использовать:
select agency.bvd.get_balance_by_agency_with_op(null,'1.12.2001', 19344, null, 1, 0) from dual
В ответ пишет: ORA-00902, invalid datatype
В чем тут дело? Функция get_balance_by_agency_with_op в пакете BVD в схеме agency возвращает ref cursor.

И еще. Обязятельно ли обьявлять тип 'Create Type' или все же можно не обьявлять?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Использование функции в select 12 года 8 мес. назад #3404

Функция должна возвращать один из типов данных sql-сервера (varchar2, number, date). ref cursor таковым не является. Не путайте типы данных PL/SQL и SQL.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Использование функции в select 12 года 8 мес. назад #3405

Новая попытка.

select * from table(cast(Agency.get_balance_by_unit_with_op(377,'1.12.2001') as bvd_stock_table_type));

Пишет: ORA-22905, cannot access rows from a non-nested table item.

Функция возвращает bvd_stock_table_type.
Тут в чем дело?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
Время создания страницы: 0.227 секунд