sql >> データベース >  >> RDS >> Oracle

エラー「ORA-01790:式は対応する式と同じデータ型である必要があります」を修正しました

    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です 桁。これにより、エラーが発生します。

    ソリューション1

    上記のエラーに対する最初の(そしておそらく最も一般的な)解決策は、各クエリに正しい列があることを確認することです。

    私の場合、間違った列を渡したのは明らかなようです。したがって、上記のクエリを次のように変更できます。

    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番目のクエリによって返される列の種類は、最初のクエリによって返される種類と一致しました。

    ソリューション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 タイプ。


    1. SYSDATE()の例– MySQL

    2. OracleDBに最後に挿入されたレコードのIDを取得します

    3. WiXからSQLExpressをブートストラップしますか?

    4. 接続文字列でのisqlの使用