sql >> データベース >  >> RDS >> Mysql

mysqlでローカル変数とプリペアドステートメントにselectを使用する

    http://bugs.mysql.com/bug.php?id=15263<から/ a> :

    したがって、私たちはできません:

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

    ?は使用できません 識別子(変数名)の代わりに。

    また、パラメータ名を使用する場合:

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

    準備中の文字列では、サーバーは単にそのridが何であるかを知りません。 準備しようとしているステートメントで参照します。 SPの外部で準備して同じ結果を得ることができます:

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

    だから私はユーザー変数を使用しました。以下を参照してください:

    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. サブクエリに2つの「WHERENOTIN」があるLaravelEloquent

    2. Innodbのランダムプライマリキー

    3. mySQLの日付をJavascriptの日付に変換する

    4. MySQLクイックヒント:DROPUSERコマンドの使用