локальные типы коллекций не допускаются в инструкциях SQL

sql oracle select collections plsql

7753 просмотра

1 ответ

20 Репутация автора

У меня есть вопрос относительно использования коллекций в функциях Oracle SQL.

В упаковке есть определения типов:

/* Types of package*/
create or replace PACKAGE "test" AS 

TYPE type_record_1 IS record ( id_num NUMBER , timestamp_num NUMBER,value NUMBER);
TYPE type_table_1 IS TABLE OF type_record_1; 
TYPE type_record_2 IS record ( id_num NUMBER , timestamp_num NUMBER,pValue NUMBER);
TYPE type_table_2 IS TABLE OF type_record_2; 
END test;

Проблема в функциях_2. function_2 использует вывод из function_1. Сообщение об ошибке появляется, когда я пытаюсь выбрать в function_2. Сообщение об ошибке «локальные типы коллекций не допускаются в инструкциях SQL».

Не могли бы вы помочь? Что не так с использованием коллекций в функциях?

/*function 1*/
FUNCTION function_1
RETURN  type_table_1
IS
table_1 type_table_1;
BEGIN
-- select values from
SELECT id_num, timestamp_num, value --type_record_1 (id_num, timestamp_num, value) 
BULK COLLECT INTO table_1 
    FROM (
      SELECT       
        l.id_num,
        EXTRACT(hour from end_time) * 60 + EXTRACT(minute from end_time) as timestamp_num,
        l.value
      FROM INTERVAL_F l
      WHERE id_num IN (SELECT id_num FROM table_rev)
    );

 RETURN table_1;

 END function_1;


 /*function 2*/
 FUNCTION function_2
         (
          table_1 IN type_table_1
          )
 RETURN type_table_2
 IS 
 table_2 type_table_2;
 BEGIN

 SELECT type_record_2(id_num , timestamp_num , pValue)
 BULK COLLECT INTO table_2 FROM (
 SELECT  id_num
       , timestamp_num 
       , value as pValue
       FROM table(table_1)  -- ERROR IS HERE
       );

 RETURN table_2;
 END function_2;
Автор: Buburumka Источник Размещён: 21.10.2014 01:07

Ответы (1)


6 плюса

83 Репутация автора

Решение

Чтобы достичь этого, вы должны использовать что-то вроде:

СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ТИП type_record_1 ... /

СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ТИП type_table_1 AS TABLE OF type_record_1; /

Oracle не позволяет типам, объявленным в пакете, быть приведенными в виде таблицы. Я говорю о Oracle до 11, до сих пор не проверить 12c новых функций :(.

Автор: Kostadin Slavkov Размещён: 21.10.2014 02:07
Вопросы из категории :
32x32