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

Pomocí select do lokální proměnné a připraveného příkazu v mysql

Z http://bugs.mysql.com/bug.php?id=15263 :

Takže nemůžeme:

PREPARE stmt FROM 'SELECT id INTO ? FROM t1';

Nemůžeme použít ? místo identifikátoru (název proměnné).

A když použijete název parametru:

PREPARE stmt FROM 'SELECT id INTO rid FROM t1';

v připravovaném řetězci pak server prostě neví, co tím rid odkazuje na prohlášení, které se snažíte připravit. Můžete to zkusit připravit mimo SP se stejným výsledkem:

mysql> prepare stmt from 'select id into p from t1';
ERROR 1327 (42000): Undeclared variable: p

Použil jsem tedy uživatelskou proměnnou, viz níže:

DROP PROCEDURE IF EXISTS `singledb`.`TOUR_TRANSFER`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `TOUR_TRANSFER`()
BEGIN
  BEGIN -- for rubric table
    -- DECLARE @tblRubric_rubric_id INT;

    SET @tblRubric_rubric_id := 0;
    SET @qry = 'SELECT count(*) into @tblRubric_rubric_id FROM zerodb2.tour_template';
    PREPARE statement FROM @qry;
    EXECUTE statement;
  END;
END$$


  1. Zdroje zálohování databáze MySQL a MariaDB

  2. Jedinečné omezení Postgres vs index

  3. SQL mezi operátory

  4. Získejte hodnoty z prvního a posledního řádku na skupinu