複数のSELECT文をUNIONするとORA-1790が発生した

掲題の通りです。 複数のSELECT文をUNION ALLで纏めて出力しようとした際に SQLを書き終わって実行するとORA-1790が発生しました。

ORA-1790

エラー内容は下記の通り

ORA-1790 式には対応する式と同じデータ型を持つ必要があります。

そのとき書いていたSQLが下記のようなもの

SELECT
 'カラム名' AS カラム名
 ,'-' AS データ
 ,COUNT(*) AS 件数
FROM
 (省略)
UNION ALL
SELECT
 'カラム名' AS カラム名
 ,NUMBER AS データ
 ,COUNT(*) AS 件数
FROM
 (省略)
UNION ALL
SELECT
 'カラム名' AS カラム名
 ,VARCHAR2 AS データ
 ,COUNT(*) AS 件数

SELECT句の2つ目の項目にご注目。
2つ目のSELECT文はAS データに対してNUMBERですが3つ目のSELECT文はVARCHARを取ってこようとしています。
※実際にはテーブルのカラム名なのでこんな型名丸出しではありません。

自分で書いているSQLなのに取りたいカラムの型が何かを把握していなかったので、同じ項目名(AS データ)に対してNUMBER型とVARCHAR型を入れようとしてしまいました。

なのでORACLEさんが「それはダメだよ」って言ってきたわけです。

解決策

キャストするだけです。

SELECT
 'カラム名' AS カラム名
 ,'-' AS データ
 ,COUNT(*) AS 件数
FROM
 (省略)
UNION ALL
SELECT
 'カラム名' AS カラム名
 ,CAST(NUMBER AS VARCHAR2(20)) AS データ
 ,COUNT(*) AS 件数
FROM
 (省略)
UNION ALL
SELECT
 'カラム名' AS カラム名
 ,VARCHAR2 AS データ
 ,COUNT(*) AS 件数

これで解決しました。
ORACLEエラーが出た瞬間は焦るけどちゃんと考えたらなんてことのないことでした。