SELECT句で使用される場合、私は、次のSELECTクエリを実行するためにOCCI(C++ライブラリ)を使用し、Oracle数値精度及び場合、このテーブルを考える
CREATE TABLE test (
c01 INT,
c02 NUMBER(10,5),
c03 NUMBER(18,10)
);
を両方ゼロスケール:
select case(c01) when 10 then c02 else c03 end from test;
この場合、取得するタイプコードはOCCI_SQLT_NUM
ですが、精度と位取りは両方とも0
です。それはどういう意味ですか(0
精度と位取り)?これはバグですか?精度/スケール、型の安全性を知ることなく
、セマンティクス及び整数または浮動小数点としてそれを治療するかどうかを決定することは不可能であるように、プログラムの正しさは、危機に瀕しています。
つまり、CASE(x) WHEN y THEN a ELSE b
式のタイプは何ですか? a
はINT
となり、b
はCHAR[32]
となりますか?私は違うと思います。では、型はどのように計算されますか?
[Oracleでは「NUMBER」と「NUMBER(*、0)」は同じですか?](http://stackoverflow.com/questions/28207708/is-number-and-number-0-the-same-イン・オラクル)。役に立つかもしれない。 – badola
@badola:いいえ。このケースは異なります。 – Nawaz
Hm、スケールと精度を明示的に指定せずに 'NUMBER'を表すと思われるのでしょうか? 'number'を返す関数を作成してみましょう。1を返し、2つから選択し、同じ型を取得するかどうかを確認してください。あなたの 'case'質問については、http://docs.oracle.com/cd/B19306_01/server.102/b14200/expressions004.htmを参照してください。すべての' return_expr'は同じデータ型を持つ必要があります。それ以外の場合はora-00932(データ型の不一致)が返されます。 'else NULL'が結果の' case'データ型を妨害している可能性もあります。 – Timekiller