Unten ist meine Stored-Prozedur, die beim Aufruf aus dem SQL-Editor funktioniert. Beim Aufruf von Code funktioniert jedoch nur die erste Anweisung (truncate). Der Einsatz funktioniert nicht. Kann mir bitte jemand helfen. Danke im Voraus.Oracle Insert-Abfrage in Stored Procedure funktioniert nicht, wenn von Code hinter
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;
}
"Funktioniert nicht" ist nicht genug Informationen, um Ihre Frage zu beantworten. Wenn beim Ausführen ein Fehler auftritt, geben Sie bitte an, was es ist. –
Hallo Peter, ich bekomme keinen Fehler. Der SP führt die INSERT-Anweisung nicht aus. –
Gibt es etwas, was ich ändern sollte? Bitte schlage vor, da ich ein Neuling für Oracle bin. –