私は、Oracle の SQL のフレーバーに比較的慣れていません。これが次の例外を返す理由がわかりません。
Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-01008: すべての変数がバインドされていません
OracleCommand cmd1 = con.CreateCommand();
cmd1.CommandType = CommandType.Text;
cmd1.CommandText = @"MERGE INTO SECURITY_PRICES$V tgt USING (select * from DUAL) src ON (src.DTE = tgt.DTE AND src.SECURITY = tgt.SECURITY AND src.SOURCE = tgt.SOURCE) WHEN MATCHED THEN UPDATE SET tgt.TYPE = 'I', tgt.SOURCE = src.Source, tgt.CURRENCY = 'JMD' ,tgt.SECURITY = src.Security, tgt.LAST_PRICE = :Close, tgt.HIGH_PRICE = :High, tgt.LOW_PRICE = :Low, tgt.DTE = src.DTE, tgt.Volume = :Vol WHEN NOT MATCHED THEN INSERT (TYPE, SOURCE, CURRENCY, SECURITY, LAST_PRICE, HIGH_PRICE, LOW_PRICE, DTE, Volume) VALUES ('I', 'E', 'JMD', :insID,:Close,:High, :Low, :Time, :Vol)";
cmd1.Parameters.Add("insID", secid);
cmd1.Parameters.Add("Close", data.Close);
cmd1.Parameters.Add("High", data.High);
cmd1.Parameters.Add("Low", data.Low);
cmd1.Parameters.Add("Time", data.Time);
cmd1.Parameters.Add("Vol", data.Volume);
int suc = cmd1.ExecuteNonQuery();
私は以下を試しました。parameters.add にコロン (':') を追加します。より少ない変数を使用して、null パラメーターを渡さないようにしました。
これがデータです。オブジェクトに解析され、各プロパティは文字列です。Oracle は厳密に型指定されたパラメーターを必要としますか? MS SQL Server で文字列を渡しても問題は発生しませんが、それは私の唯一の推測です。
- 内部ID: 228IL
- 低: 0
- 高 0
- 時間: 2018-01-29T13:05:26
- ボリューム: 0
- 終了:0