現在の日付に従ってテーブル名が生成されるストアド プロシージャの下を呼び出しています。
DELIMITER $$
USE `test`$$
DROP PROCEDURE IF EXISTS `sp_pickalertstatus`$$
CREATE PROCEDURE `sp_pickalertstatus`()
BEGIN
DECLARE msgID BIGINT (10);
DECLARE tbl VARCHAR(100);
SET msgID=(SELECT alertID FROM tbl_intofone_alert_transaction WHERE
deliverystatus LIKE '22%' LIMIT 1);
IF(msgID IS NOT NULL)THEN
SET tbl=(SELECT CONCAT('history.tbl_',DATE_FORMAT(NOW(),"%y%m%d")));
INSERT INTO tbl (MEMBERID,SOURCE,MOBILE,SMPPID,PRIORITY,SMSID
,SMSCONTENTTYPE,MESSAGE,REQUESTDATETIME,DR_GROUPID,dr_service_type,
dr_celleb_msg_id,dr_submit_date,dr_done_date,dr_stat,dr_err,dr_smppid)
SELECT memberid,SenderID,MSISDN,SMPPID,'1',alertID,'TXT',Message,
updatetime,'0','PIN','0',DATE_FORMAT(InTime,'ymdHis'),
DATE_FORMAT(updatetime,'ymdHis'),'DELIVRD',
'000','03' FROM tbl_intofone_alert_transaction WHERE alertID=msgID;
END IF;
END$$
DELIMITER ;
「エラー コード: 1146 テーブル 'test.tbl' が存在しません」というエラーが表示されます。ここで何が間違っていますか?
Prepared ステートメントを使用してこれを行うよう提案した後、上記のコードを変更しました。
DELIMITER $$
USE `test`$$
DROP PROCEDURE IF EXISTS `sp_pickalertstatus22`$$
CREATE PROCEDURE `sp_pickalertstatus22`()
BEGIN
DECLARE msgID BIGINT (10);
DECLARE tbl VARCHAR(100);
SET msgID=(SELECT alertID FROM tbl_intofone_alert_transaction WHERE deliverystatus LIKE '22%' LIMIT 1);
IF(msgID IS NOT NULL)THEN
SET tbl=(SELECT CONCAT('history.tbl_',DATE_FORMAT(NOW(),"%y%m%d")));
SET @sl=CONCAT('INSERT INTO ?',' (MEMBERID,SOURCE,MOBILE,SMPPID,PRIORITY,SMSID,SMSCONTENTTYPE,MESSAGE,REQUESTDATETIME,
DR_GROUPID,dr_service_type,dr_celleb_msg_id,dr_submit_date,dr_done_date,dr_stat,dr_err,dr_smppid)
SELECT memberid,SenderID,MSISDN,SMPPID,?,alertID,?,Message,updatetime,?,?,?,DATE_FORMAT(InTime,?),
DATE_FORMAT(updatetime,?),?,?,? FROM tbl_intofone_alert_transaction WHERE alertID=?');
PREPARE stmt FROM @sl;
SET @tbl=tbl;
SET @pr='06';
SET @txt='TXT';
SET @grp='0';
SET @srtyp='PIN';
SET @clmsg='0';
SET @intm='%y%m%d%H%i%s';
SET @outm='%y%m%d%H%i%s';
SET @drst='DELIVRD';
SET @drerr='000';
SET @drsmp='03';
SET @msg=msgID;
EXECUTE stmt USING @tbl,@pr,@txt,@grp,@srtyp,@clmsg,@intm,@outm,@drst,@drerr,@drsmp,@msg;
END IF;
END$$
DELIMITER ;
しかし、まだ機能していませんか?エラーが発生する
Error Code : 1064
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax
to use near '? MEMBERID,SOURCE,MOBILE,SMPPID,PRIORITY,SMSID,
SMSCONTENTTYPE,MESSAGE,REQUESTDA' at line 1
クエリ文字列を使用して準備ステートメントを実行中:
EXECUTE stmt USING '06','TXT','0','PIN','0','%y%m%d%H%i%s'
,'%y%m%d%H%i%s','DELIVRD','000','03';
取得エラー:
Error Code : 1064
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to
use near ''06','TXT','0','PIN','0','%y%m%d%H%i%s','%y%m%d%H%i%s','DELIVRD',
'000','03';' at line 25