Oracle - Записи из нескольких таблиц с параметром * - PullRequest
0 голосов
/ 20 сентября 2018

Мне нужно получить записи из нескольких разных представлений.Представления имеют точно такие же столбцы.Я хочу использовать параметр *, потому что там постоянно добавляются новые представления и с UNION ALL всегда будет один и тот же код.

Что работает:

SELECT ID, TEXT FROM TABLE1
UNION ALL
SELECT ID, TEXT FROM TABLE2
UNION ALL
SELECT ID, TEXT FROM TABLE3
UNION ALL
SELECT ID, TEXT FROM TABLE4
UNION ALL
SELECT ID, TEXT FROM TABLE5
UNION ALL
SELECT ID, TEXT FROM TABLE6
UNION ALL
SELECT ID, TEXT FROM TABLE7

Что я хочу:

SELECT * FROM TABLE1
UNION ALL
SELECT * FROM TABLE2
UNION ALL
SELECT * FROM TABLE3
UNION ALL
SELECT * FROM TABLE4
UNION ALL
SELECT * FROM TABLE5
UNION ALL
SELECT * FROM TABLE6
UNION ALL
SELECT * FROM TABLE7´

Если я это сделаю, я получу следующую ошибку:

ORA-01790: expression must have same datatype as corresponding expression

ОБНОВЛЕНИЕ :

Хорошо, извините, моя ошибка.Представления не были точно такими же, потому что один тип данных был преобразован в число, а другой в varchar.Проблема решена.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Представления не были точно такими же, потому что один тип данных был преобразован в число, а другой в varchar.

SQL Fiddle

Настройка схемы Oracle 11g R2 :

CREATE TABLE TABLE1 (
  id    NUMBER(8,0),
  text  VARCHAR2(400),
  value NUMBER
);

CREATE TABLE TABLE2 (
  id    NUMBER(8,0),
  text  VARCHAR2(200),
  value VARCHAR2(20)
);

INSERT INTO TABLE1 VALUES ( 1, '1', 1 );
INSERT INTO TABLE1 VALUES ( 2, '2', '2' );

Запрос 1 : Если типы данных не совпадают, вы получите исключение:

SELECT * FROM TABLE1
UNION ALL
SELECT * FROM TABLE2

Результаты :

ORA-01790: expression must have same datatype as corresponding expression

Запрос 2 :

Для решения этой проблемы вы можете использоватьSELECT * FROM ... для таблиц с соответствующими типами данных и явным именем столбцов и применить преобразование для таблиц с различными типами данных:

SELECT * FROM TABLE1
UNION ALL
SELECT id, text, TO_NUMBER( value ) FROM TABLE2

Результаты :

| ID | TEXT | VALUE |
|----|------|-------|
|  1 |    1 |     1 |
|  2 |    2 |     2 |
0 голосов
/ 20 сентября 2018

, если обе таблицы имеют одинаковый номер столбца и тип данных, он должен работать, см. Пример ниже

with cte1 (st,dt) as 
(
select 'New' as st, '30/09/2014 3:48:10 PM' as dt from dual
union all
select 'Open' as st, '30/09/2014 3:48:10 PM' as dt from dual
union all
select 'Open' as st, '20/09/2014 3:48:10 PM' as dt from dual
union all
select 'Qued' as st, '18/06/2015 1:31:30' as dt from dual

)
,
 t2(st,dt) as
 (
 select 'New' as st, '30/09/2014 3:48:10 PM' as dt from dual
union all
select 'Open' as st, '30/09/2014 3:48:10 PM' as dt from dual
union all
select 'Open' as st, '20/09/2014 3:48:10 PM' as dt from dual
union all
select 'Qued' as st, '18/06/2015 1:31:30' as dt from dual
 )
select * from cte1
union all 
select * from t2 

https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=430f00a6616515f2cdaefe61990285d0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...