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
Подробнее в документации
Комментариев нет:
Отправить комментарий