У меня есть таблица Oracle 11g со следующими именами и типами столбцов:
ID VARCHAR2(32 BYTE)
VERSION VARCHAR2(12 BYTE)
Я пытаюсь заставить переменные связывания работать в команде Oracle с параметрами для операторов Update в этой таблице с использованием ODP.NET и С#, но мне не повезло. Вот код, который я использую:
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, такими как выше, как требование, потому что я начну, в конце концов, обновлять большие клобы в других таблицах (и конкатенировать клобы, поскольку строки в SQL будут, конечно вызвать ошибки ограничения размера). Поэтому получить эту работу будет первая победа.
В этой строке;
oracleCommand2.Parameters.Add("ddiTable", OracleDbType.Varchar2, ParameterDirection.Input).Value = ddiTable;
Фактически вы пытаетесь добавить в качестве параметра имя своей таблицы (ddiTable
). Вы не можете этого сделать. И нет смысла добавлять имя таблицы запросов в качестве параметра. И если вы хотите использовать метод Parameters.Add()
с 3 параметрами, вы должны использовать его как параметры;
public OracleParameter Add(
string parameterName,
OracleType dataType,
int size
)
Это единственный способ перегрузки. Нет перегрузки для приема третьего параметра параметра ParameterDirection.Input
of parameter.Add Parameters.Add()
.
Мне нужно знать, как получить переменные связывания и параметризованные команды Oracle, работающие с командами SQL Update, такими как выше, как требование.
Могу я предложить вам прочитать их;