Oracle Databaseで「ORA-01790:式は対応する式と同じデータ型である必要があります」というエラーが表示される場合は、UNION
などの演算子を使用している可能性があります。 、INTERSECT
、またはEXCEPT
複合クエリを実行しますが、各クエリによって返される列は異なるデータ型グループを使用します。
この問題を修正するには、2番目のクエリによって返される各列が、最初のクエリの対応する列と同じデータ型グループを使用していることを確認する必要があります。
このエラーを生成するコードの例を次に示します。
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;
結果:
ORA-01790: expression must have same datatype as corresponding expression
ここでの問題は、TeacherName
を組み合わせようとしていることです。 StudentId
を含む最初のクエリの列 2番目のクエリの列。
私の場合、TeacherName
列はvarchar(50)
です 列ですが、StudentId
列はint
です 桁。これにより、エラーが発生します。
上記のエラーに対する最初の(そしておそらく最も一般的な)解決策は、各クエリに正しい列があることを確認することです。
私の場合、間違った列を渡したのは明らかなようです。したがって、上記のクエリを次のように変更できます。
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
結果:
TEACHERNAME |
---|
ベン |
請求書 |
キャシー |
Ein |
フェイ |
ジェット |
スパイク |
ウォーレン |
または、次のことを行うことができます:
SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;
結果:
TEACHERID | TEACHERNAME |
---|---|
1 | フェイ |
1 | ウォーレン |
2 | ベン |
2 | ジェット |
3 | キャシー |
3 | スパイク |
4 | キャシー |
4 | アイン |
5 | 請求書 |
5 | ウォーレン |
6 | 請求書 |
どちらの場合も、2番目のクエリによって返される列の種類は、最初のクエリによって返される種類と一致しました。
場合によっては、正しい列があるのに、それらのタイプが一致しないことがあります。このような場合、列の1つを別のデータ型に変換する必要がある場合があります。
この例を使用すると、次のことができます。
SELECT TeacherName FROM Teachers
UNION
SELECT TO_CHAR(StudentId) FROM Students;
結果:
TEACHERNAME |
---|
1 |
2 |
3 |
4 |
5 |
6 |
ベン |
請求書 |
キャシー |
ウォーレン |
これは、名前とIDを組み合わせているため、おそらく最良の例ではありませんが、確実に理解できます。 TO_CHAR(number)
を使用することで、エラーを回避することができました。 StudentId
を変換する関数 列からchar
タイプ。