В Oracle я иногда хотел бы создавать такие конструкции, как эти
SELECT * FROM TABLE(STRINGS('a', 'b', 'c'))
SELECT * FROM TABLE(NUMBERS(1, 2, 3))
Очевидно, я могу объявить свои собственные типы для вышеуказанного. Я могу выбирать между TABLE
и VARRAY
. Например:
CREATE TYPE STRINGS AS TABLE OF VARCHAR2(100);
CREATE TYPE NUMBERS AS VARRAY(100) OF NUMBER(10);
В этом конкретном случае другим решением является запись таких вещей, как
SELECT 'a' FROM DUAL UNION ALL
SELECT 'b' FROM DUAL UNION ALL
SELECT 'c' FROM DUAL
Но у меня могут быть более сложные примеры, где мне действительно понадобится тип TABLE
/VARRAY
. Итак, что, если мой SQL работает в неизвестной системе, где я не могу создавать типы, потому что у меня могут не быть необходимых грантов?
Итак, мой вопрос: Означает ли Oracle "анонимные" TABLE
/VARRAY
типы, доступные на любом экземпляре Oracle? Как и Postgres/H2/HSQLDB простые типы ARRAY
?
ОБНОВЛЕНИЕ. Я использую этот SQL-код в основном из Java, если это актуально. Нет необходимости объяснять мне PL/SQL, я просто ищу анонимные типы массивов SQL (т.е. "Анонимные" автономные хранимые типы). Если они вообще не существуют, ответ будет НЕТ