0

out 変数を使用しなかった場合、ストアド プロシージャは正しく機能しましたが、out 変数を使用せずにストアド プロシージャを実行すると、次のエラーが表示されます。

MySQL は次のように述べています: #1327 - 宣言されていない変数: sp_result

コード:

CREATE DEFINER=`root`@`localhost` PROCEDURE `test3`(OUT `sp_result` INT(11), IN `sp_where_param` VARCHAR(100), IN `sp_where_value` VARCHAR(100), IN `sp_table_name` VARCHAR(100))
NO SQL
BEGIN
DECLARE tbl_id VARCHAR(100);

SET tbl_id = CONCAT(sp_table_name,'_id');

SET @temp1=CONCAT('SELECT count(',tbl_id,') INTO sp_result FROM ',sp_table_name,' WHERE ',sp_where_param,' = \'',sp_where_value,'\'');
PREPARE stmt1 FROM @temp1;
EXECUTE stmt1;

END

多分 out 変数なしでは動作しません:(

4

2 に答える 2

1

ユーザー変数を使用してみてください -

CREATE DEFINER = 'root'@'localhost'
PROCEDURE test3 (OUT `sp_result` int(11), IN `sp_where_param` varchar(100), IN `sp_where_value` varchar(100), IN `sp_table_name` varchar(100))
NO SQL
BEGIN
  DECLARE tbl_id varchar(100);

  SET tbl_id = CONCAT(sp_table_name, '_id');

  SET @temp1 = CONCAT('SELECT COUNT(', tbl_id, ') INTO @sp_result FROM ', sp_table_name, ' WHERE ', sp_where_param, ' = \'', sp_where_value, '\'');

  PREPARE stmt1 FROM @temp1;
  EXECUTE stmt1;
  DEALLOCATE PREPARE stmt1;

  set sp_result = @sp_result;

END

...そして DEALLOCATE PREPARE ステートメントを追加します。

于 2012-12-27T07:43:37.617 に答える
0

そのはず-

SET tbl_id = CONCAT(sp_table_name,'_id');
SET @temp1=CONCAT('SELECT count(',tbl_id,') INTO

このような

SET @tbl_id:= CONCAT(sp_table_name,'_id');
SET @temp1:=CONCAT('SELECT count(',tbl_id,') INTO
于 2012-12-27T06:33:44.620 に答える