AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 25405
Accepted
quanta
quanta
Asked: 2012-10-04 21:27:10 +0800 CST2012-10-04 21:27:10 +0800 CST 2012-10-04 21:27:10 +0800 CST

Agendador de eventos: sem dados - zero linhas buscadas, selecionadas ou processadas?

  • 772
  • MySQL 5.5.28

O log de erros continua recebendo este erro:

121004 12:08:59 [ERROR] Event Scheduler: [user@ip][reportingdb.tvc_bookingonline_update_status] No data - zero r
ows fetched, selected, or processed 
121004 12:13:59 [ERROR] Event Scheduler: [user@ip][reportingdb.tvc_bookingonline_update_status] No data - zero r
ows fetched, selected, or processed 
121004 12:18:59 [ERROR] Event Scheduler: [user@ip][reportingdb.tvc_bookingonline_update_status] No data - zero r
ows fetched, selected, or processed 

A definição:

mysql> show create event reportingdb.tvc_bookingonline_update_status\G
*************************** 1. row ***************************
               Event: tvc_bookingonline_update_status
            sql_mode: NO_AUTO_CREATE_USER
           time_zone: SYSTEM
        Create Event: CREATE DEFINER=`user`@`ip` EVENT `tvc_bookingonline_update_status` ON SCHEDULE EVERY 5 MINUTE STARTS '2012-07-27 10:08:59' ON COMPLETION NOT PRESERVE ENABLE DO CALL `bo_tvc_booking_supdate_status_booking`( @plstbookingid_destroy)
character_set_client: latin1
collation_connection: latin1_swedish_ci
  Database Collation: utf8_general_ci

mysql> show create procedure reportingdb.bo_tvc_booking_supdate_status_booking\G
*************************** 1. row ***************************
           Procedure: bo_tvc_booking_supdate_status_booking
            sql_mode: 
    Create Procedure: CREATE DEFINER=`user`@`ip` PROCEDURE `bo_tvc_booking_supdate_status_booking`(
        OUT plstbookingid_destroy VARCHAR(1500)
    )
    DETERMINISTIC
BEGIN
    DECLARE  no_found_row INT DEFAULT 0;
    DECLARE _idbooking INT;
    DECLARE _status INT;
    DECLARE _no_contract VARCHAR(25);
    DECLARE _fromdate DATE;
    DECLARE _todate DATE;
    DECLARE _flagsync SMALLINT DEFAULT 0;
    DECLARE _ROWSCOUNT INT DEFAULT 0;
    DECLARE _lstBookDestroy VARCHAR(500);
    DECLARE _lstBookRunning VARCHAR(500);
    DECLARE _lstBookFinish VARCHAR(500);
    #LAY DU LIEU BOOKING
    DECLARE  cur_row CURSOR FOR
        SELECT B.`idbooking`, B.`status`, B.`no_contract`, B.`fromdate`, B.`todate` 
        FROM `tvc_bookings` B       
        WHERE B.`status` IN (1, 2, 3);

    DECLARE EXIT HANDLER FOR SQLEXCEPTION  SET @error=1;
    DECLARE  CONTINUE HANDLER FOR NOT FOUND SET  no_found_row = 1;
    SELECT COUNT(*) INTO _ROWSCOUNT 
    FROM `tvc_bookings` B       
    WHERE B.`status` IN (1, 2, 3);
    IF(_ROWSCOUNT > 0) THEN
            SET AUTOCOMMIT=0;
        #BAT DAU DUYET TUNG BOOKING
        SET plstbookingid_destroy = '';
        SET _lstBookDestroy = 'List bookid destroy: ';
        SET _lstBookRunning = 'List bookid running: ';
        SET _lstBookFinish = 'List bookid finish: ';
        OPEN cur_row;
        FETCH cur_row INTO _idbooking, _status, _no_contract, _fromdate, _todate;
        WHILE no_found_row = 0 DO 
            #KIEM TRA RULE
            IF(_status = 1) THEN
                #IF((_no_contract IS NULL OR _no_contract = '') AND DATEDIFF(_fromdate, CURDATE()) <= 3) THEN
                #MODIFY DEN HET NGAY MOI HUY BOOKING
                #IF((_no_contract IS NULL OR _no_contract = '') AND DATEDIFF(CURDATE(), _fromdate) = 1) THEN#YEU CAU NEW NGAY CHAY = NOW
                IF((_no_contract IS NULL OR _no_contract = '') AND DATEDIFF(CURDATE(), _fromdate) > 0) THEN#YEU CAU NEW NGAY CHAY = NOW
                    CALL `bo_tvc_create_version_booking`( _idbooking, 'Services store huy booking den ngay chay ma chua co HD', 'Services');
                    UPDATE `tvc_bookings`  
                    SET `status` = 4,  
                        `modifiedby` = 'SERVICES',
                        `modifieddate` = CURRENT_TIMESTAMP()
                    WHERE `idbooking` = _idbooking;             
                    #OUT INFO
                    SET _lstBookDestroy = CONCAT(_lstBookDestroy, _idbooking, ',');
                END IF;       
            END IF;#IF(_status = 1)

            IF(_status = 2 AND _no_contract != '') THEN
                IF(_fromdate <= CURDATE()) THEN
                    #CHECK TABLE
                    /*
                    SELECT COUNT(*) INTO _flagsync
                    FROM `bo_tvc_sync_hdcn_thucchay` A
                    WHERE A.`booking_id` = _idbooking AND A.`updated` = 1;
                    */
                    SET _flagsync = 1;#FIX CODE CONNECT HDCN SOON

                    IF(_flagsync > 0) THEN
                        CALL `bo_tvc_create_version_booking`( _idbooking, 'Services store chuyen trang thai hop dong thanh running', 'Services');
                        UPDATE `tvc_bookings`  
                        SET `status` = 3,  
                            `modifiedby` = 'SERVICES',
                            `modifieddate` = CURRENT_TIMESTAMP()
                        WHERE `idbooking` = _idbooking;                             

                        #UPDATE FLAG DA CHUYEN                            
                        UPDATE `bo_tvc_sync_hdcn_thucchay`  
                        SET `updated` = 2
                        WHERE `booking_id` = _idbooking AND `updated` = 1;

                        SET _lstBookRunning = CONCAT(_lstBookRunning, _idbooking, ',');
                    END IF;    
                END IF;

                IF(DATE_ADD(_todate, INTERVAL 1 DAY) <= CURDATE()) THEN
                    CALL `bo_tvc_create_version_booking`( _idbooking, 'Huy book vi het ngay chay ma ko co thuc chay ben hdcn', 'Services');
                    UPDATE `tvc_bookings`  
                    SET `status` = 4,  
                        `modifiedby` = 'SERVICES',
                        `modifieddate` = CURRENT_TIMESTAMP()
                    WHERE `idbooking` = _idbooking;                             

                    #OUT INFO
                    SET _lstBookFinish = CONCAT(_lstBookFinish, _idbooking, ',');
                END IF;
            END IF;#IF(_status = 2 AND _no_contract != '') THEN

            #UPDATE CAC BOOKING DA CHAY XONG
            IF(_status = 3 AND DATE_ADD(_todate, INTERVAL 1 DAY) <= CURDATE()) THEN
                CALL `bo_tvc_create_version_booking`( _idbooking, 'Services store chuyen chuyen booking thanh chay ket thuc', 'Services');
                UPDATE `tvc_bookings`  
                SET `status` = 5,  
                    `modifiedby` = 'SERVICES',
                    `modifieddate` = CURRENT_TIMESTAMP()
                WHERE `idbooking` = _idbooking;                        
                SET _lstBookFinish = CONCAT(_lstBookFinish, _idbooking, ',');
            END IF;#IF(_status = 3 AND DATE_ADD(_todate, INTERVAL 1 DAY) <= CURDATE())
        FETCH cur_row INTO _idbooking, _status, _no_contract, _fromdate, _todate;
        END WHILE;
        CLOSE cur_row;

        #OUT INFO TO SERVICES
        SET plstbookingid_destroy = CONCAT(_lstBookDestroy, '\r\n', _lstBookRunning, '\r\n', _lstBookFinish);
    END IF;
    COMMIT;
END
character_set_client: latin1
collation_connection: latin1_swedish_ci
  Database Collation: utf8_general_ci

O que posso fazer para me livrar desse erro?

mysql stored-procedures
  • 2 2 respostas
  • 7866 Views

2 respostas

  • Voted
  1. Best Answer
    Cristian Porta
    2012-12-05T22:36:20+08:002012-12-05T22:36:20+08:00

    Antes do MySQL 5.6.3, se uma instrução que gera um aviso ou erro faz com que um manipulador de condição seja invocado, o manipulador pode não limpar a área de diagnóstico. Isso pode levar à aparência de que o manipulador não foi invocado. A discussão a seguir demonstra o problema e fornece uma solução alternativa.

    Suponha que uma tabela t1 esteja vazia. O seguinte procedimento seleciona a partir dele, levantando uma condição de No Data:

    CREATE PROCEDURE p1()
    BEGIN
    DECLARE a INT;
    DECLARE CONTINUE HANDLER FOR NOT FOUND
    BEGIN
    SET @handler_invoked = 1;
    END;
    SELECT c1 INTO a FROM t1;
    END;
    

    Como pode ser visto na sequência de instruções a seguir, a condição não é limpa pela invocação do manipulador (caso contrário, a saída SHOW WARNINGS estaria vazia). Mas como pode ser visto pelo valor de @handler_invoked, o manipulador foi realmente invocado (caso contrário, seu valor seria 1).

    mysql> SET @handler_invoked = 0;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> CALL p1();
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    
    mysql> SHOW WARNINGS;
    +---------+------+-----------------------------------------------------+
    | Level | Code | Message |
    +---------+------+-----------------------------------------------------+
    | Warning | 1329 | No data - zero rows fetched, selected, or processed |
    +---------+------+-----------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> SELECT @handler_invoked;
    +------------------+
    | @handler_invoked |
    +------------------+
    | 1 |
    +------------------+
    1 row in set (0.00 sec)
    There are two ways to work around this issue:
    

    Adicione uma instrução fictícia extra que limpa os avisos no final do manipulador de condição:

    CREATE PROCEDURE p1()
    BEGIN
    DECLARE a INT;
    DECLARE CONTINUE HANDLER FOR NOT FOUND
    BEGIN
    SET @handler_invoked = 1;
    SELECT 1 FROM (SELECT 1) AS t;
    END;
    SELECT c1 INTO a FROM t1;
    END;
    

    Isso funciona para manipuladores CONTINUE e EXIT.

    "Este problema foi resolvido a partir do MySQL 5.6.3 e nenhuma solução alternativa é necessária." http://dev.mysql.com/doc/refman/5.5/en/condition-handling.html

    Como este é apenas um caso em que a mensagem de aviso não foi apagada, não é perigoso para a integridade dos dados. A solução alternativa acima limpa a mensagem de aviso, mas também produz uma saída "fictícia".

    Aqui estão duas postagens de blog muito úteis que contêm detalhes adicionais sobre esse assunto:

    https://blogs.oracle.com/svetasmirnova/entry/warning_and_error_information_in https://blogs.oracle.com/svetasmirnova/entry/warning_and_error_information_in1

    Cristian

    • 3
  2. R. S.
    2012-11-05T19:23:21+08:002012-11-05T19:23:21+08:00

    De acordo com este relatório de bug , adicionar

    SELECT TABLE_NAME INTO TableName FROM information_schema.`TABLES` LIMIT 1;
    

    depois de COMMIT deve fazer o truque

    • 1

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve