Страницы

Поиск по вопросам

понедельник, 22 октября 2018 г.

Как явно задать тип для значения NULL в SELECT?

Eсть таблица со столбцами COL_1 number, COL_2 number, запрос целиком:
SELECT * FROM TABLE_1
И есть представление:
CREATE VIEW V1 AS SELECT NULL AS COL_1, TABLE_2.COL AS COL_2 FROM TABLE_2
Хочу их объединить:
SELECT * FROM TABLE_1 union all SELECT * FROM V1
И получаю ошибку - выражения не соответствуют друг другу, ожидалось NULL, в представлении имеет тип varchar2.
Но я не просил его быть текстовым. Как явно задать тип?


Ответ

Надо столбцы привести к одному типу. Например для:
create table table_1 (col_1 number(10), col_2 number); create table table_2 (col number);
будет так:
CREATE VIEW V1 AS SELECT CAST (NULL AS number(10)) AS COL_1, TABLE_2.COL AS COL_2 FROM TABLE_2 ;
Функция CAST сконвертирует NULL, по умолчанию VARCHAR2(0), в тип данных, указанный во втором операнде.
Тот же результат возможно также достигнуть функцией to_number(null), но только если нет необходимости ограничения по длине (т.н. non-constrained type). То есть, например:
cast (null as number(10)) ... -- user_tab_cols.data_precision=10 to_number (null) ... -- user_tab_cols.data_precision=null
Подробнее в документации

Комментариев нет:

Отправить комментарий