次の列名とタイプのOracle11gテーブルがあります。
ID VARCHAR2(32 BYTE)
VERSION VARCHAR2(12 BYTE)
ODP.NETとC#を使用して、このテーブルのUpdateステートメントのOracleパラメーター化コマンドでバインド変数を機能させようとしていますが、うまくいきません。これが私が使用しているコードです:
string constr = gconstr + "; Data Source=" + db;
OracleConnection con = new OracleConnection(constr);
con.Open();
ddiId = "WS_5043";
ddiVer = "1.0.3";
string UPDATE_CLOB_QUERY = "UPDATE :ddiTable SET version=:ddiVer WHERE id=:ddiId";
Oracle.DataAccess.Types.OracleXmlType ret;
OracleCommand oracleCommand2 = new OracleCommand(UPDATE_CLOB_QUERY, con);
oracleCommand2.Parameters.Clear();
oracleCommand2.Parameters.Add("ddiId", OracleDbType.Varchar2, ParameterDirection.Input).Value = ddiId;
oracleCommand2.Parameters.Add("ddiTable", OracleDbType.Varchar2, ParameterDirection.Input).Value = ddiTable;
oracleCommand2.Parameters.Add("ddiVer", OracleDbType.Varchar2, ParameterDirection.Input).Value = ddiVer;
oracleCommand2.ExecuteNonQuery();
oracleCommand2.Dispose();
上記のコードをVS2010で実行すると、次のOracleエラーが発生します。
ORA-01036: illegal variable name/number
ただし、SQLでバインド変数宣言を削除すると、上記は機能します。
string UPDATE_CLOB_QUERY = "UPDATE wstable SET version='1.0.2' WHERE id='WS_5043'";
私は何が間違っているのですか?
バインド変数とパラメーター化されたOracleコマンドを、上記のようなSQL Updateコマンドで動作させる方法を知る必要があります。これは、最終的に他のテーブルのラージCLOBを更新し始めるためです(もちろん、SQLで文字列としてCLOBを連結します)。サイズ制限エラーが発生します)。したがって、これを機能させることが最初の勝利になります。