这是我的程序代码:
CREATE DEFINER=`produccion`@`%` PROCEDURE `indicadorGlobal`(in mesi int(8),in anhoi int(8))
BEGIN
declare indMat double;
declare indMatEf double;
declare indMant double;
declare indMantEf double;
declare ppmC double;
declare tiempoR double;
declare contador int (8);
declare acumulado double;
declare total double;
declare codd int (8);
declare indMantTres double;
#primer indicador de matriceria
SELECT SUM( CASE
WHEN ABS(ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_esti_entrega)/3600)-ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_real_entrega)/3600))>=264 THEN ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_esti_entrega)/3600)*0
WHEN ABS(ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_esti_entrega)/3600)-ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_real_entrega)/3600))>=168 AND ABS(ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_esti_entrega)/3600)-ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_real_entrega)/3600))<264 THEN ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_esti_entrega)/3600)*40
WHEN ABS(ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_esti_entrega)/3600)-ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_real_entrega)/3600))>=72 AND ABS(ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_esti_entrega)/3600)-ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_real_entrega)/3600))<168 THEN ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_esti_entrega)/3600)*70
WHEN ABS(ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_esti_entrega)/3600)-ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_real_entrega)/3600))>=24 AND ABS(ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_esti_entrega)/3600)-ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_real_entrega)/3600))<72 THEN ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_esti_entrega)/3600)*90
WHEN ABS(ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_esti_entrega)/3600)-ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_real_entrega)/3600))<24 THEN ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_esti_entrega)/3600)*100
END ) / SUM(ABS(TIMESTAMPDIFF(SECOND,fecha_asignacion,fecha_esti_entrega)/3600)) into indMat
FROM plan_trabajo
WHERE culminado = 1 And Month(fecha_real_entrega)=mesi And Year(fecha_real_entrega) =anhoi
GROUP BY MONTH(fecha_real_entrega);
#segundo indicador de matriceria
SELECT
(((select COUNT(*) FROM plan_trabajo WHERE MONTH(fecha_real_entrega)=mesi AND YEAR(fecha_real_entrega)=anhoi) - COUNT(*)) / (select COUNT(*) FROM plan_trabajo WHERE MONTH(fecha_real_entrega)=mesi AND YEAR(fecha_real_entrega)=anhoi ))*100 into indMatEf
FROM(plan_trabajo)
WHERE culminado = 1 AND repetir=1 AND MONTH(fecha_real_entrega)=mesi AND YEAR(fecha_real_entrega)=anhoi;
#primer indicador de mantenimiento
SELECT ((select COUNT(*) FROM mmt_plantrabajo WHERE MONTH(CAST(fechaEntrega AS DATE))=mesi AND YEAR(CAST(fechaEntrega AS DATE))=anhoi) -
(select COUNT(*) FROM mmt_plantrabajo WHERE MONTH(CAST(fechaEntrega AS DATE)) = mesi AND YEAR(CAST(fechaEntrega AS DATE))= anhoi and
tipoOrden = 'CORRECTIVO' and statusPT = 'FINALIZADO')) / (select COUNT(*) FROM mmt_plantrabajo WHERE MONTH(CAST(fechaEntrega AS DATE))=mesi
AND YEAR(CAST(fechaEntrega AS DATE))=anhoi)*100 into indMant FROM mmt_plantrabajo WHERE statusPT = 'FINALIZADO'
AND MONTH(CAST(fechaEntrega AS DATE))=mesi AND YEAR(CAST(fechaEntrega AS DATE))=anhoi;
#segundo indicador de mantenimiento
select (SUM(Oplp)/SUM(Ohpl)) indMantEf FROM mmt_plantrabajo WHERE
MONTH(CAST(fechaEntrega AS DATE)) = mesi AND YEAR(CAST(fechaEntrega AS DATE))= anhoi and statusPT = 'FINALIZADO';
#tercer indicador de mantenimiento
select (((SUM(horasDesOp)-SUM(horasParada))/SUM(horasDesOp))*100) into indMantTres FROM mmt_plantrabajo WHERE MONTH(CAST(fechaEntrega AS DATE)) = mesi AND YEAR(CAST(fechaEntrega AS DATE))= anhoi and statusPT = 'FINALIZADO';
#indicador de SGC partes por millon cliente
select ind into ppmC from ind_ppmc where mes=mesi and anho=anhoi;
#indicador de SGC tiempo de respuesta no conformidades
select valor into tiempoR from tiempo_resp_nc where mes=mesi and anho=anhoi;
select count(*), avg (valor) into contador, acumulado from indicadores_valor where mes=mesi and anho=anhoi and status=1;
if acumulado is null then
set acumulado=0;
set contador=0;
end if;
if indMat is null then
set indMat=0;
else
set acumulado=acumulado+indMat;
set contador=contador+1;
end if;
if indMatEf is null then
set indMatEf=0;
else
set acumulado=acumulado+indMatEf;
set contador=contador+1;
end if;
if indMant is null then
set indMant=0;
else
set acumulado=acumulado+indMant;
set contador=contador+1;
end if;
if indMantEf is null then
set indMantEf=0;
else
set acumulado=acumulado+indMantEf;
set contador=contador+1;
end if;
if indMantTres is null then
set indMantTres=0;
else
set acumulado=acumulado+indMantTres;
set contador=contador+1;
end if;
if ppmC is null then
set ppmC=0;
else
set acumulado=acumulado+ppmC;
set contador=contador+1;
end if;
if tiempoR is null then
set tiempoR=0;
else
set acumulado=acumulado+tiempoR;
set contador=contador+1;
end if;
#el indicador global sera la suma de los indicadores entre el numero de indicadores
set total = acumulado/contador;
if total is null then
set total=0;
end if;
#tecnica para generar codigo irrepetible
set codd=(mesi*10000)+anhoi;
insert into ind_global (codigo,anho,mes,ind,acum,esperado,numero) values (codd,anhoi,mesi,format(total,2),acumulado,contador*95,contador ) on duplicate key update
codigo=codd, anho=anhoi, mes=mesi, ind=format(total,2), acum=acumulado, esperado=contador*95, numero=contador;
END;
以下是我在vb中调用它的方式
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim cmd As New MySQLCommand
cmd = conxv.crear_consulta(cnn, "call indicadorGlobal(@mes,@anho)")
cmd.Parameters.Add("@mes", meses.SelectedIndex + 1)
cmd.Parameters.Add("@anho", Integer.Parse(anho.Text))
Try
If cmd.ExecuteNonQuery() > 0 Then
MsgBox("Generado exitosamente", MsgBoxStyle.Information,"S.I.P.")
End If
Me.Close()
Catch ex As Exception
MsgBox("Ha ocurrido un error: " & ex.ToString(), MsgBoxStyle.Critical, "S.I.P.")
End Try
End Sub
它给我留下了以下错误:&#34;无法在给定的上下文中返回结果集&#34;但是如果你查看我的代码我使用的是executetenonquery,它不应该&#39什么也没有回报......我不明白,任何想法?
答案 0 :(得分:0)
问题出在我的代码中:
select (SUM(Oplp)/SUM(Ohpl)) indMantEf FROM mmt_plantrabajo WHERE
MONTH(CAST(fechaEntrega AS DATE)) = mesi AND YEAR(CAST(fechaEntrega AS DATE))= anhoi and statusPT = 'FINALIZADO';
正确的方法是
#segundo indicador de mantenimiento
select (SUM(Oplp)/SUM(Ohpl)) into indMantEf FROM mmt_plantrabajo WHERE
MONTH(CAST(fechaEntrega AS DATE)) = mesi AND YEAR(CAST(fechaEntrega AS DATE))= anhoi and statusPT = 'FINALIZADO';
我完全忘记将&#34;放入&#34;我希望如果有人现在得到这个错误我们现在先去哪里看看。