Below is my Stored procedure which works fine while calling from the SQL editor. But when calling from code, only the first statement (truncate) works. The insert does not work. Can anyone please help me. Thanks in advance.
SP:
create or replace PROCEDURE GETALARMLIST
(
pEqCode ESPC_O_ALARM_DATA.EQCODE%TYPE,
pOccMinTime ESPC_O_ALARM_DATA.OCCTIME%TYPE,
pOccMaxTime ESPC_O_ALARM_DATA.OCCTIME%TYPE,
displayparam OUT SYS_REFCURSOR
)
AS
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE tempalarmlist';
INSERT INTO tempalarmlist(OCCDATE,FIRSTOCCTIME,COUNT)
SELECT substr(a.OCCTIME, 1, 4) || '/' || substr(a.OCCTIME, 5, 2) || '/' || substr(a.OCCTIME, 7, 2),min(OCCTIME), count(*)
FROM ESPC_O_ALARM_DATA a WHERE EQCODE = pEqCode AND a.OCCTIME > pOccMinTime AND a.OCCTIME < pOccMaxTime
GROUP BY substr(a.OCCTIME, 1, 4) || '/' || substr(a.OCCTIME, 5, 2) || '/' || substr(a.OCCTIME, 7, 2)
ORDER BY substr(a.OCCTIME, 1, 4) || '/' || substr(a.OCCTIME, 5, 2) || '/' || substr(a.OCCTIME, 7, 2);
UPDATE tempalarmlist
SET
ALMID=(select ALMID from ESPC_O_ALARM_DATA where ESPC_O_ALARM_DATA.OCCTIME = tempalarmlist.FIRSTOCCTIME and ESPC_O_ALARM_DATA.EQCODE = pEqCode),
ALMCODE =(select ALMCODE from ESPC_O_ALARM_DATA where ESPC_O_ALARM_DATA.OCCTIME = tempalarmlist.FIRSTOCCTIME and ESPC_O_ALARM_DATA.EQCODE = pEqCode),
ALMTXT= (select ALMTXT from ESPC_O_ALARM_DATA where ESPC_O_ALARM_DATA.OCCTIME = tempalarmlist.FIRSTOCCTIME and ESPC_O_ALARM_DATA.EQCODE = pEqCode);
OPEN displayparam FOR SELECT * FROM tempalarmlist;
END GETALARMLIST;
Code:
public static DataTable GetAlarmList(string datasource, string eqCode, string OccMinTime, string OccMaxTime){
OracleConnection objConn = new OracleConnection();
objConn.ConnectionString = System.Configuration.ConfigurationManager.AppSettings[datasource];
OracleCommand objCmd = new OracleCommand();
objCmd.Connection = objConn;
objCmd.CommandType = CommandType.StoredProcedure;
objCmd.CommandText = "GETALARMLIST";
objCmd.Parameters.Add("pEqCode", eqCode);
objCmd.Parameters.Add("pOccMinTime", OccMinTime);
objCmd.Parameters.Add("pOccMaxTime", OccMaxTime);
objCmd.Parameters.Add("displayparam", OracleType.Cursor).Direction = ParameterDirection.Output;
DataTable dtAlarmList = new DataTable();
try
{
objConn.Open();
OracleDataAdapter oda = new OracleDataAdapter(objCmd);
oda.Fill(dtAlarmList);
}
catch (Exception ex)
{
throw ex;
}
finally
{
objConn.Close();
}
return dtAlarmList;
}