Почему ORACLE выбрасывает ORA-01790? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть запрос с операторами UNION ALL.

SELECT * FROM HULL_A
    UNION ALL
SELECT * FROM HULL_B;  

выдает ошибку

ORA-01790 "выражение должно иметь тот же тип данных, что и соответствующее выражение "

Однако я проверил это, и я думаю, что это не так. Я использовал следующее, чтобы проверить:

select db1.data_type, db2.data_type, db1.data_length, db2.data_length, db1.data_precision, db2.data_precision, db1.data_scale, db2.data_scale
from all_tab_columns db1
     inner join all_tab_columns db2
       on (db1.owner = db2.owner
           and db1.column_name = db2.column_name)       
where db1.table_name = 'HULL_A'
  and db2.table_name = 'HULL_B'
  and (
        db1.data_type = db2.data_type
        OR 
        db1.data_length = db2.data_length
      ) 

Результат: enter image description here

Мне удалось связать HULL_A с HULL_C и HULL_D, используя UNION ALL.

Так почему же ORACLE выдает ошибку? Какой еще тест я могу выполнить, чтобы выполнить UNION ALL?

Я работаю над WINDOWS 10 ORACLE 11g

1 Ответ

1 голос
/ 25 июня 2019

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

Вы можете попробовать следующий запрос, чтобы определить несоответствие в столбцах обеих таблиц:

SELECT
    A.COLUMN_ID COLUMN_HULL_A,
    A.DATA_TYPE DATA_TYPE_HULL_A,
    B.COLUMN_ID COLUMN_HULL_B,
    B.DATA_TYPE DATA_TYPE_HULL_B
FROM
    (
        SELECT
            COLUMN_ID,
            DATA_TYPE
        FROM
            USER_TAB_COLUMNS
        WHERE
            TABLE_NAME = 'HULL_A'
    ) A
FULL OUTER JOIN (
    SELECT
        COLUMN_ID,
        DATA_TYPE
    FROM
        USER_TAB_COLUMNS
    WHERE
        TABLE_NAME = 'HULL_B'
)B ON (A.COLUMN_ID = B.COLUMN_ID AND A.DATA_TYPE = B.DATA_TYPE)
WHERE
    A.COLUMN_ID IS NULL
    OR B.COLUMN_ID IS NULL;

Ура !!

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