Oracle: есть ли эквивалент в ROW в PostgreSQL? - PullRequest
2 голосов
/ 24 ноября 2010

Когда я создаю экземпляр типа в PostgreSQL, я могу просто сделать,

INSERT INTO mountain VALUES ('Meru',4567,ROW(6.8,-3.2));

и ROW (...) будет приведено к типу, соответствующему типу в таблице.В Oracle я должен сделать это следующим образом:

INSERT INTO mountain VALUES ('Meru',4567,GeoCoord(6.8,-3.2));

и вручную вставить тип в INSERT.

Есть ли способ заставить Oracle вести себя как Postgres?

РЕДАКТИРОВАТЬ: определение таблицы

CREATE TABLE Mountain (
 Name VARCHAR(20) CONSTRAINT MountainKey PRIMARY KEY,
 Height NUMERIC CONSTRAINT MountainHeight
 CHECK (Height >= 0),
 Coordinates GeoCoord CONSTRAINT MountainCoord
 CHECK (((Coordinates).Longitude >= -180) AND 
        ((Coordinates).Longitude <= 180) AND
        ((Coordinates).Latitude >= -90) AND
        ((Coordinates).Latitude <= 90)));

1 Ответ

1 голос
/ 25 ноября 2010

Эквивалентом конструктора ROW PostgreSQL в Oracle является объект или конструктор коллекции , как вы указали в опубликованном коде.

Однако нет единственного выражения, которое могло бы создать экземпляр нужного типа. Из документации по базе данных Oracle 11g R2 очевидно, что конструктор должен явно вызываться для создания и ссылки на тип:

Для инициализации вложенной таблицы или Varray, вы используете конструктор, определенная системой функция с той же имя в качестве типа коллекции. это Функция создает коллекции из элементы, переданные ему.

Вы должны явно вызвать конструктор для каждого varray и вложенного стола переменная. Ассоциативные массивы, третий вид коллекции, не используйте Конструкторы. Вызовы конструктора разрешено везде, где есть вызовы функций допускается.

Кроме того, обратите внимание, что конструктор по умолчанию доступен для всех типов (кроме ассоциативных массивов), поэтому вам не нужно писать собственные конструкторы.

Нет также различий в поведении при рассмотрении типов уровней схемы, которые создаются с помощью оператора CREATE TYPE - конструктор также должен быть вызван в этом случае. Из документации :

Системное значение атрибута Конструктор требует от вас передать построить значение для каждого атрибута типа. Затем конструктор устанавливает атрибуты нового объекта экземпляр этих значений

...