Oracle 11 gのORA-01790

1849 ワード

質問はグループの中でどのようにクエリーの結果の値を+1させるかを聞くことから来て、方法は実はとても簡単で、直接SQL文の中で+1すればいいので、暇があればNVLで処理することができます.
しかしテストの際にユニオンALL(テストのフィールドはvarchar 2タイプ)を使用した結果、ORA-01790とエラーが発生しました.テストコードは次のとおりです.
SELECT t.rearrangement13n+1 AS rearrangement13n  FROM t_plan t WHERE t.id = 97

UNION ALL

SELECT t.rearrangement13n FROM t_plan t WHERE t.id=97


その後、タイプ変換をしているような気がして、ドキュメントを調べました.
OERR: ORA 1790 expression must have same datatype as corresponding expression 

Error:  ORA 1790

Text:   expression must have same datatype as corresponding expression

-------------------------------------------------------------------------------

Cause:  A SELECT list item corresponds to a SELECT list item with a different

        datatype in another query of the same set expression.

Action: Check that all corresponding SELECT list items have the same datatypes.

        Use the TO_NUMBER, TO_CHAR, and TO_DATE functions to do explicit data

        conversions.


コードを次のように変更します.
SELECT to_char(t.rearrangement13n+1) FROM t_plan t WHERE t.id = 97

UNION ALL

SELECT t.rearrangement13n FROM t_plan t WHERE t.id=97

問題が解決する.しかし、Oracleはどのように変換されますか?また、Oracleでselect後のフィールドタイプをどのように出力しますか?ドキュメントに見つかりませんでした.(解決すべき)