Postgres - вставить значение NUMERIC [] '0' в нижний оператор выбора UNION - PullRequest
0 голосов
/ 30 октября 2019

В POSTGRES - я пытаюсь создать представление из 2 таблиц. Когда значение '0' закодировано для вставки в качестве значения для столбца EAST_LONGITUDE_NMBR типа данных NUMERIC [24,20] в нижней части оператора выбора UNION, генерируется сообщение ERROR.

ПредставлениеСтолбец EXTENTS EAST_LONGITUDE_NMBR происходит из таблицы и столбца CELL_EXTENT.EAST_LONGITUDE_NMBR с типом данных NUMERIC [24,20]

Ниже приведен код.

    CREATE VIEW EXTENTS
    (
       ID,
       EXTENT_TYPE,
       NAME,
       EAST_LONGITUDE_NMBR
    )

    AS
       SELECT 
          "CELL_EXTENT"."CELL_ID_NMBR",
          'CELL',
          UPPER ("CELL_EXTENT"."CELL_NAME"), 
          "CELL_EXTENT"."EAST_LONGITUDE_NMBR"
       FROM "EARTH"."CELL_EXTENT"

   UNION
       (SELECT 
           "AREA_INTEREST"."AREA_ID_NMBR",
           'GEOPOLITICAL',
           UPPER ("AREA_INTEREST"."AREA_NAME"),
           0
       FROM "EARTH"."AREA_INTEREST");

Вставленное значение '0'в нижнем UNION select вызывает следующую ошибку при создании представления EXTENTS.

ОШИБКА: типы UNION числовые [] и целое не могут быть сопоставлены

Я попробовал следующее и получил показанные ошибки:

    0                 ERROR:  UNION types numeric[] and integer cannot be matched
    0.0               ERROR:  UNION types numeric[] and numeric cannot be matched
    0.0::NUMERIC[]    ERROR:  cannot cast type numeric to numeric[]
    0::NUMERIC[]      ERROR:  cannot cast type integer to numeric[]

Я проверил множество веб-сайтов собсуждение типов данных Postgres, в частности NUMERIC, NUMERIC [], INTEGER, DECIMAL

Разница между типом DECIMAL и NUMERIC в PSQL

https://github.com/npgsql/npgsql/issues/655

https://www.cybertec -postgresql.com / ru / mapping-oracle-datatypes-to-postgresql /

http://www.postgresqltutorial.com/postgresql-cast/

http://www.postgresqltutorial.com/postgresql-to_number/

Я мог бы продолжить, но вы получите картину. О типах данных много, но нет примеров для '0' в качестве фактического значения в коде Postgres для столбца типа данных NUMERIC [] в операторе UNION.

Мне кажется, это простое исправление,пара нажатий клавиш здесь или там, чтобы установить правильное значение, но это ускользает от меня. Я использую pgAdmin4.

Можете ли вы помочь? Спасибо, Маргарет

1 Ответ

0 голосов
/ 30 октября 2019

Кажется простым: используйте массив вместо 0.

В зависимости от того, что вы предпочитаете, вы можете использовать

ARRAY[]::numeric[]   -- empty array

или

ARRAY[0]::numeric[]  -- array with a single 0
...