I have 2 oracle prodecures inside a package like this:
PROCEDURE INSERT_LOG (
message_id in VARCHAR2,
mq_request in VARCHAR2,
req_timestamp in VARCHAR2
)
IS
BEGIN
INSERT INTO TESTSCHEMA.MY_MESSAGE_LOG (MESSAGE_ID,MQ_REQUEST,REQ_TIMESTAMP)
VALUES(message_id,mq_request,TO_DATE(req_timestamp,'DD-MM-YYYY HH24:MI:SS'));
commit;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
RAISE_APPLICATION_ERROR (-20000, 'Error: INSERT_LOG() '||SQLERRM);
END;
PROCEDURE UPDATE_LOG (
message_id IN VARCHAR2,
mq_response IN VARCHAR2,
resp_identifier IN VARCHAR2,
resp_timestamp IN VARCHAR2,
req_timestamp IN VARCHAR2
)
IS
BEGIN
UPDATE TESTSCHEMA.MY_MESSAGE_LOG A
SET
A.MQ_RESPONSE = mq_response,
A.RESP_IDENTIFIER =resp_identifier,
A.RESP_TIMESTAMP = TO_DATE(resp_timestamp,'DD-MM-YYYY HH24:MI:SS')
WHERE
A.MESSAGE_ID = message_id
and A.REQ_TIMESTAMP = TO_DATE(req_timestamp,'DD-MM-YYYY HH24:MI:SS');
commit;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
RAISE_APPLICATION_ERROR (-20000, 'Error: UPDATE_LOG() '||SQLERRM);
END;
And I try to call these procedures from my C# code. The issue is that the insert procedure works fine, but the update procedure does not update any rows. On investigating, I noticed that although I set the variables for the stored procedure from the C# code, the values of these variables are reflecting as null or empty on the database side. Here is my C# code for the update procedure.
try
{
using (DbConnection connection = new DbConnection())
{
var comm = new OracleCommand
{
Connection = connection.OpenUsbAppsSchema(),
CommandText = <My Procedure Name>,
CommandType = CommandType.StoredProcedure
};
var param = new OracleParameter[5];
param[0] = new OracleParameter("message_id", OracleDbType.Varchar2, 500, ParameterDirection.Input) { Value = messageId };
param[1] = new OracleParameter("mq_response", OracleDbType.Varchar2, 2000, ParameterDirection.Input) { Value = mqResponse };
param[2] = new OracleParameter("resp_identifier", OracleDbType.Varchar2, 200, ParameterDirection.Input) { Value = identifier };
param[3] = new OracleParameter("resp_timestamp", OracleDbType.Varchar2,500, ParameterDirection.Input) { Value = resposeTimeStamp };
param[4] = new OracleParameter("req_timestamp", OracleDbType.Varchar2, 500, ParameterDirection.Input) {Value = requestTimeStamp};
comm.Parameters.AddRange(param);
comm.ExecuteNonQuery();
}
}
catch (Exception ex)
{
throw ex;
}
Any pointers on what am I doing wrong?