DB2 SQL-массив в атрибутах-определениях пользовательского типа - PullRequest
0 голосов
/ 10 июля 2011

У меня вопрос по поводу пользовательских типов в DB2 (v. 9.7.0.441). Я хочу создать тип, который имеет массив атрибутов другого определенного пользователем типа. Позвольте мне показать вам, что я имею в виду под кратким (вымышленным) примером:

Это UDT, который я хочу использовать в другом типе

CREATE TYPE sport AS
(
  Sport VARCHAR(10)
) MODE DB2SQL;

Это UDT, который должен использовать приведенный выше

CREATE TYPE person AS
(
  plays sport ARRAY[3] // 'REF(sport)' or 'plays VARCHAR(10) ARRAY[3]' don't work either  
) MODE DB2SQL;

DB2 просто говорит, что токен ARRAY [3] является неожиданным.

Любой намек, что здесь может быть не так? К настоящему времени было бы достаточно иметь массив CHAR в UDT ...

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 13 июля 2011

Хорошо, хорошо,

в соответствии с оператором CREATE TYPE (массив) db2"тип массива может использоваться только как тип данных:

  • Локальная переменная в составном операторе SQL (скомпилированном)
  • Параметр подпрограммы SQL
  • Параметр процедуры Java (только для обычных массивов)
  • Возвращаемый тип функции SQL
  • Глобальная переменная

и

Переменная или параметр, определенный с типом массива, могут использоваться только в составных SQL-выражениях (скомпилированных) «

Так что просто невозможно использовать тип массива внутри определенного пользователем типа: - /

0 голосов
/ 02 июля 2012

Я бы предположил что-то вроде следующего ...

CREATE TYPE sport AS(Sport VARCHAR(10)) MODE DB2SQL;
CREATE TYPE PersonT AS(plays SportT ARRAY[3]) MODE DB2SQL;
CREATE TYPE SportArrayT AS SportT ARRAY[3];
CREATE TYPE PersonT AS (plays SportT SportArrayT) MODE DB2SQL;

Однако 3-е утверждение не выполняется. Очевидно, что массив пользовательского типа (или REF (SportT)) не допускается: - (

0 голосов
/ 12 июля 2011

Посмотрите документ для CREATE TYPE (массив) .

Я не совсем уверен, что вы пытаетесь сделать, но примеры, которые они приводят, выглядят так:

CREATE TYPE CAPITALSARRAY AS VARCHAR(30) ARRAY[VARCHAR(20)]
...