sql >> Database >  >> RDS >> Mysql

Selecteren in lokale variabele en voorbereide instructie gebruiken in mysql

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

Dus we kunnen niet doen:

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

We kunnen ? . niet gebruiken in plaats van identifier (variabelenaam).

En wanneer u de parameternaam gebruikt:

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

in de string die wordt voorbereid, dan weet de server gewoon niet wat die rid verwijst naar de verklaring die u probeert voor te bereiden. Je kunt proberen het buiten SP voor te bereiden met hetzelfde resultaat:

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

Dus ik gebruikte gewoon de gebruikersvariabele, zie hieronder:

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. InnoDB:kan ./ibdata1-fout niet vergrendelen:35

  2. Een externe sleutel maken in SQL Server (T-SQL-voorbeelden)

  3. UNPIVOT op een onbepaald aantal kolommen

  4. System.Data.OracleClient vereist Oracle-clientsoftware versie 8.1.7 of hoger