Cursores Anidados - SP
Publicado por Erik Eudave (1 intervención) el 05/10/2007 23:22:15
Que tal, estoy intentando hacer un sp con 2 cursores anidados, el primero barre una talba, es decir lee todos sus registros y el segundo actualiza (update) una tabla dependiendo de los valosres que traiga el primer cursos, este sp no funciona:
CREATE PROCEDURE sp_traff_news_01_p(v_fecha date, v_hora INTEGER )
DEFINE v_sgsn VARCHAR(10,0);
DEFINE v_apn VARCHAR(101,0);
DEFINE v_cgi_ci INTEGER;
DEFINE v_cause_proc INTEGER;
DEFINE v_cause_ini INTEGER;
DEFINE v_cause_cause INTEGER;
DEFINE v_cont INTEGER;
FOREACH registros FOR
SELECT sgsn, substr(apn,1,15), cgi_ci, cause_proc, cause_ini, cause_cause
INTO v_sgsn, v_apn, v_cgi_ci, v_cause_proc, v_cause_ini, v_cause_cause
FROM trafnews1
WHERE report_time = v_fecha
and hora = v_hora
FOREACH c_update FOR
SELECT p_msinf_enqu INTO v_cont
FROM traff_news_cont2
WHERE fecha = v_fecha
and hora = v_hora
and sgsn = v_sgsn
and apn = v_apn
and cgi_ci = v_cgi_ci
IF v_cont IS NULL THEN
INSERT INTO traff_news_cont2(fecha,hora,sgsn,apn,cgi_ci,p_msinf_enqu)
VALUES (v_fecha,v_hora,v_sgsn,v_apn,v_cgi_ci,0);
CONTINUE FOREACH;
END IF;
LET v_cont = v_cont + 1;
UPDATE traff_news_cont2 SET p_msinf_enqu = v_cont
WHERE CURRENT OF c_update;
END FOREACH;
END FOREACH;
END PROCEDURE;
podrian ayudarme con esto o encontrar una forma mas eficiente de hacerlo, gracias de antemano.
CREATE PROCEDURE sp_traff_news_01_p(v_fecha date, v_hora INTEGER )
DEFINE v_sgsn VARCHAR(10,0);
DEFINE v_apn VARCHAR(101,0);
DEFINE v_cgi_ci INTEGER;
DEFINE v_cause_proc INTEGER;
DEFINE v_cause_ini INTEGER;
DEFINE v_cause_cause INTEGER;
DEFINE v_cont INTEGER;
FOREACH registros FOR
SELECT sgsn, substr(apn,1,15), cgi_ci, cause_proc, cause_ini, cause_cause
INTO v_sgsn, v_apn, v_cgi_ci, v_cause_proc, v_cause_ini, v_cause_cause
FROM trafnews1
WHERE report_time = v_fecha
and hora = v_hora
FOREACH c_update FOR
SELECT p_msinf_enqu INTO v_cont
FROM traff_news_cont2
WHERE fecha = v_fecha
and hora = v_hora
and sgsn = v_sgsn
and apn = v_apn
and cgi_ci = v_cgi_ci
IF v_cont IS NULL THEN
INSERT INTO traff_news_cont2(fecha,hora,sgsn,apn,cgi_ci,p_msinf_enqu)
VALUES (v_fecha,v_hora,v_sgsn,v_apn,v_cgi_ci,0);
CONTINUE FOREACH;
END IF;
LET v_cont = v_cont + 1;
UPDATE traff_news_cont2 SET p_msinf_enqu = v_cont
WHERE CURRENT OF c_update;
END FOREACH;
END FOREACH;
END PROCEDURE;
podrian ayudarme con esto o encontrar una forma mas eficiente de hacerlo, gracias de antemano.
Valora esta pregunta


0