0
我有這個問題。我使用的是MySQL 5.7.10MySQL程序:錯誤提取
我定義這個PL(我知道,在TRAZAS表中的調試消息是有點零碎):
DROP procedure IF EXISTS my_proc;
DELIMITER $
CREATE PROCEDURE my_proc(... , OUT resultado INT, OUT mensaje TEXT)
MODIFIES SQL DATA
BEGIN
DECLARE sqlstate_code VARCHAR(10);
DECLARE message_text TEXT;
DECLARE mysql_errno INT;
DECLARE v_id_cliente VARCHAR(100) DEFAULT '';
DECLARE v_device VARCHAR(100) DEFAULT '';
DECLARE v_fecha_solicitud_crm DATETIME;
DECLARE v_id_ciclo VARCHAR(50);
DECLARE v_fecha_alta DATETIME;
DECLARE v_fecha_baja DATETIME;
DECLARE v_fecha_alta_promocion DATETIME;
DECLARE done INT DEFAULT FALSE;
DECLARE my_cursor CURSOR FOR
select id_cliente, device, fecha_solicitud_crm, id_ciclo,
min(FECHAS.fecha_inicio) AS FECHA_INICIO, max(FECHAS.fecha_fin) AS FECHA_FIN
from xxx
where
xxx
GROUP BY xxx
ORDER BY xxx;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
SET resultado = 1;
START TRANSACTION;
INSERT INTO TRAZAS(TEXTO) VALUES (concat_ws(' - ', 'ERROR my_proc'));
COMMIT;
get diagnostics condition 1 message_text = MESSAGE_TEXT, sqlstate_code = RETURNED_SQLSTATE, mysql_errno = MYSQL_ERRNO;
SET mensaje = concat_ws(' - ', sqlstate_code, mysql_errno, message_text);
START TRANSACTION;
INSERT INTO TRAZAS(TEXTO) VALUES (concat_ws(' - ', 'ERROR my_proc', mensaje));
COMMIT;
END;
SET resultado = 0;
SET mensaje = '';
OPEN my_cursor;
/* Inicio del bucle */
read_loop: LOOP
START TRANSACTION;
INSERT INTO TRAZAS(TEXTO) VALUES ('Inicio del loop. Antes del fetch');
COMMIT;
FETCH my_cursor INTO v_id_cliente, v_device, v_fecha_solicitud_crm, v_id_ciclo, v_fecha_alta, v_fecha_baja;
IF done THEN
LEAVE read_loop;
END IF;
START TRANSACTION;
INSERT INTO TRAZAS(TEXTO) VALUES ('Despues del fetch');
COMMIT;
/*****/
START TRANSACTION;
INSERT INTO TRAZAS(TEXTO) VALUES (concat_ws(' - ', 'my_proc', 'v_id_cliente', v_id_cliente));
INSERT INTO TRAZAS(TEXTO) VALUES (concat_ws(' - ', 'my_proc', 'v_device', v_device));
INSERT INTO TRAZAS(TEXTO) VALUES (concat_ws(' - ', 'my_proc', 'v_fecha_solicitud_crm', v_fecha_solicitud_crm));
INSERT INTO TRAZAS(TEXTO) VALUES (concat_ws(' - ', 'my_proc', 'v_fecha_alta', v_fecha_alta));
INSERT INTO TRAZAS(TEXTO) VALUES (concat_ws(' - ', 'my_proc', 'v_fecha_baja', v_fecha_baja));
COMMIT;
/*****/
/*
Stuff with fetched data
*/
START TRANSACTION;
INSERT INTO TRAZAS(TEXTO) VALUES ('Siguiente iteracion del loop');
COMMIT;
/* Fin del bucle */
END LOOP read_loop;
CLOSE my_cursor;
END$
DELIMITER ;
我敢肯定光標選擇取6行。我在HeidiSQL中使用相同的PL輸入數據運行該查詢,並獲取6行。
此外,我敢肯定,6行中的任何字段爲空或空白。所有數據都得到滿足。
不幸的是,遊標只返回1行。 當前的行爲是:
- 當檢索結果和退出消息以選擇@resultado,@mensaje,它示出了0和空白。
因此,它似乎有在本地FETCH句子錯誤,但我不能獲取有關「得到的診斷」的錯誤任何信息,HeidiSQL不顯示任何東西.. 。
我被困在這一點。任何幫助非常感謝。
更新1:這裏是通過遊標查詢中檢索HeidiSQL的實際數據:
INSERT INTO `myTable` (`id_cliente`, `device`, `fecha_solicitud_crm`, `id_ciclo`, `FECHA_INICIO`, `FECHA_FIN`) VALUES ('cod1-6a00-43b6-86ad-1234567e551', '606', '2017-08-17', 'C14', '2017-07-02 05:00:22', '2017-07-21 05:55:03');
INSERT INTO `myTable` (`id_cliente`, `device`, `fecha_solicitud_crm`, `id_ciclo`, `FECHA_INICIO`, `FECHA_FIN`) VALUES ('cod2-25d3-4282-a471-12345672806', '606', '2017-08-17', 'C14', '2017-02-19 07:03:47', '2017-07-19 07:55:02');
INSERT INTO `myTable` (`id_cliente`, `device`, `fecha_solicitud_crm`, `id_ciclo`, `FECHA_INICIO`, `FECHA_FIN`) VALUES ('cod3-c07d-42cd-9b23-12345671c2e', '606', '2017-08-17', 'C14', '2017-06-29 05:40:17', '2017-07-27 05:05:02');
INSERT INTO `myTable` (`id_cliente`, `device`, `fecha_solicitud_crm`, `id_ciclo`, `FECHA_INICIO`, `FECHA_FIN`) VALUES ('cod4-aafe-4442-a429-12345679312', '606', '2017-08-17', 'C14', '2017-06-24 05:22:24', '2017-07-19 07:55:02');
INSERT INTO `myTable` (`id_cliente`, `device`, `fecha_solicitud_crm`, `id_ciclo`, `FECHA_INICIO`, `FECHA_FIN`) VALUES ('cod5-0408-4656-84de-12345676ea5', '606', '2017-08-17', 'C14', '2017-04-04 08:17:27', '2017-07-23 05:05:01');
INSERT INTO `myTable` (`id_cliente`, `device`, `fecha_solicitud_crm`, `id_ciclo`, `FECHA_INICIO`, `FECHA_FIN`) VALUES ('cod6-b1e2-4192-8f33-12345676ac1', '606', '2017-08-17', 'C14', '2017-04-30 07:03:09', '2017-07-25 05:05:02');
您是否有可以發佈的樣本數據?這將更容易確定問題的原因。 – wchiquito
我無法重現該問題,請參閱[db-fiddle](https://www.db-fiddle.com/f/hPNn1rnwRaru9KaW7K2nKi/0)。 – wchiquito
@wchiquito,非常感謝您的回答。我發佈了由查詢檢索到的實際數據(我更新了主帖)。 –