sql >> Databáze >  >> RDS >> Mysql

Vytváření kurzoru pomocí dynamického SQL v MySQL

Není povoleno DEFINE cur CURSOR FOR ready_statement, musíte definovat platný SQL příkaz. Dobrou zprávou je, že můžete definovat kurzor na pohledu, který lze později dynamicky vytvořit. Například...

DROP PROCEDURE IF EXISTS my_dynamic_proc;
DELIMITER //
CREATE PROCEDURE my_dynamic_proc(tablename varchar(64), fieldname varchar(64), country VARCHAR(64))
BEGIN
    DECLARE adr_value varchar(500);
    DECLARE done BOOLEAN DEFAULT FALSE;
    -- Cursor definition
    DECLARE cur1 CURSOR FOR SELECT address FROM tmp_view_address;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    -- Dynamic view definition and creation
    SET @v = concat('CREATE OR REPLACE VIEW tmp_view_address as SELECT `',fieldname,'` as address FROM ',tablename,' WHERE country_name = "',country,'" group by 1 order by count(1) desc');
    PREPARE stm FROM @v;
    EXECUTE stm;
    DEALLOCATE PREPARE stm;
    -- Open cursor
    OPEN cur1;
    read_loop: LOOP
      FETCH cur1 INTO adr_value;
      IF done THEN
        LEAVE read_loop;
      END IF;
      -- Basic output result
      SELECT concat("My address is ",adr_value);
      -- Use every result in a dynamic update
      SET @u = concat('update ',tablename,' set new_field_address = "',adr_value,'" where country_name = "',country,'" and new_field_address is null');
      PREPARE stm FROM @u;
      EXECUTE stm;
      DEALLOCATE PREPARE stm;
  END LOOP;
  CLOSE cur1;
END//
DELIMITER ;


  1. Jak vygenerovat stromové zobrazení z této sady výsledků založené na algoritmu Tree Traversal Algorithm?

  2. Úvod do dolování dat

  3. Osvědčené postupy pro efektivní ukládání hash md5 v mysql

  4. Nahrajte více obrázků a uložte jejich cestu do databáze