0

プロシージャを呼び出すと、エラーが返されます。

1064 - SQL 構文にエラーがあります。1行目の「NULL」付近で使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください

修正方法、手順コードにエラーがありますか?

これが私のストアドプロシージャです:

DELIMITER $$
DROP PROCEDURE IF EXISTS `gamedb`.`ALIAS#SEARCH`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ALIAS#SEARCH`(
  in section_id varchar(255),
  in category_id varchar(255),
  in content_id varchar(255)
)

BEGIN
declare q varchar(4000);
set @q = 'SELECT * FROM tbl_alias WHERE ALIAS_ACTIVE_STATUS=1';

IF section_id IS NOT NULL THEN
  set @q = concat(q,' AND ALIAS_SECTION_ID = ',section_id);
END IF;

IF category_id IS NOT NULL THEN
  set @q = concat(q,' AND ALIAS_CATEGORY_ID = ',category_id);
END IF;

IF content_id IS NOT NULL THEN
  set @q = concat(q,' AND ALIAS_CONTENT_ID = ',content_id);
END IF;

set @q= concat(q,' ORDER BY ALIAS_ID DESC');
prepare stmt from @q;

EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
4

1 に答える 1

0

いくつか問題あり

  1. ユーザー変数からしかできPREPAREないので、ローカル変数は必要ありませんq
  2. @使用時に@q変数がありませんCONCAT()

    set @q = concat(q,' AND ALIAS_SECTION_ID = ',section_id);
                    ^
    
  3. INパラメータVARCHARは、クエリを作成するときに値をより適切に引用するように定義されているため、

あなたのSPはこのように見えると言われています

DELIMITER $$
CREATE PROCEDURE `ALIAS#SEARCH`(
  in section_id varchar(255),
  in category_id varchar(255),
  in content_id varchar(255)
)

BEGIN
  SET @q = 'SELECT * FROM tbl_alias WHERE ALIAS_ACTIVE_STATUS = 1';

  IF section_id IS NOT NULL THEN
    SET @q = CONCAT(@q, ' AND ALIAS_SECTION_ID = ''', section_id, '''');
  END IF;

  IF category_id IS NOT NULL THEN
    SET @q = CONCAT(@q, ' AND ALIAS_CATEGORY_ID = ''', category_id, '''');
  END IF;

  IF content_id IS NOT NULL THEN
    SET @q = CONCAT(@q, ' AND ALIAS_CONTENT_ID = ''', content_id, '''');
  END IF;

  SET @q = CONCAT(@q, ' ORDER BY ALIAS_ID DESC');

  PREPARE stmt FROM @q;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
于 2013-08-28T06:24:52.147 に答える