私は手順P_GET_TABLE1
に埋め込まれて、次のクエリを持っている:UNION演算子がOracleDataAdapterでデータ型の変更を引き起こすのはなぜですか?
SELECT
t1.field1 XXXX
FROM table1 t1
field1
はNUMBER(12)
です。この手順は、OracleDataAdapter
を使用して.NETコードで展開され、XXXX
がlong
に変換されるようにDataTable
を埋め込みます。
SELECT
t1.field1 XXXX
FROM table1 t1
UNION
SELECT
0 as XXXX
FROM table2
組合は、しかし、XXXX
はlong
に変換することができないように、データ型の変更、のみdecimal
を引き起こしているようだ:
は、私は別の手順P_GET_TABLE2
を持っています。
私の質問は以下のとおりです。
UNION
オペレータがデータ型を変更するOracleDataAdapter
が発生しないのはなぜ?- 私は具体的には、このコードは、データを取得するために使用され
long
としてXXXX
を解釈するOracleDataAdapter
を強制することができます:
OracleDataAdapter da = new OracleDataAdapter();
da.SelectCommand = cmd;
DataTable dt = new DataTable();
da.Fill(dt);
foreach(DataRow row in da.Rows)
{
long value = (long)row["XXXX"]; // works when P_GET_TABLE1; exception when P_GET_TABLE2 is used;
}
例外:この狩猟'Object of type 'System.Decimal' cannot be converted to type 'System.Int64'.'
あなたは、通常のOracleデータ型のGoogle検索を行うに期待するものとは異なっており、それはなどのInt小数数、に関しての違いを説明します... – MethodMan
何から '選択ダンプ(XXXX、1016)から入手できます(UNION TABLE1 T1から t1.field1 XXXX を選択すると、table2のFROM XXXX として 0を選択 )' –
私は前に同様の問題を見てきました。解決策は、すべての選択でCAST関数でフィールドを明示的に折り返すことです。 – OldProgrammer