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 タイプ。