【发布时间】:2014-03-07 12:36:15
【问题描述】:
尝试创建我的第一个存储过程时,我进行了广泛的研究,但找不到通过 phpMyAdmin 输入代码的方法,因此下载了 MYSQL Workbench 6.0 并以这种方式放置我的脚本 - 但它抛出了 2014 error (Commands out of sync, you cannot run this command now)。但是我注意到 Workbench 似乎创建了两行 - 第一行表示正在运行,第二行表示错误。
例程是在发布合同时更新三个表并插入另一个表。合同由捆绑包组成,它们又由与另一个表中的特定问题相关的项目组成。
是我的代码还是我应该在最后包含一些清除命令,如果是的话应该是什么?程序输入是合约 id、用户 id 和他们的 IP 地址(用于日志记录)。
在 PHP 中,当最终使用 CALL 时,我将如何清除结果,因为我不断看到 Stackoverflow 2014 回答第二次调用失败的地方?另外,我怎样才能通过 phpMyAdmin 或者如果使用 putty 将它放到 ubuntu 服务器上,我应该将 sql 脚本 ftp 到哪里?
DELIMITER //
DROP PROCEDURE IF EXISTS ContrctAwardStatusLog;
CREATE PROCEDURE ContrctAwardStatusLog( IN c_Id INT(8), IN u_Id INT(11), IN u_Ip varchar(20) )
BEGIN
Block1: BEGIN
DECLARE done INT DEFAULT 0;
DECLARE b_id INT DEFAULT 0;
DECLARE citm_id INT DEFAULT 0;
DECLARE r_id INT DEFAULT 0;
DECLARE c_1 CURSOR FOR SELECT bundle_id FROM bundles WHERE contract_id = c_Id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN c_1;
REPEAT
FETCH c_1 INTO b_id ;
Block2: BEGIN
DECLARE done2 INT DEFAULT 0;
DECLARE c_2 CURSOR FOR SELECT contitem_id, issue_id FROM c_items WHERE bundle_id= b_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done2 = 1;
OPEN c_2;
REPEAT
FETCH c_2 INTO citm_id r_id;
INSERT INTO track_status (rowid, WStatusBy, WStatus, WStatusWhen) VALUES(r_id, u_Id, 13,NOW());
UPDATE h_issues SET WStatus='13' WHERE RowID = r_id;
UPDATE c_items SET act_state='13' WHERE contitem_id=citm_id;
UNTIL done2
END REPEAT;
CLOSE c_2;
END Block2;
UPDATE bundles SET bundle_stat = '13' WHERE bundle_id = b_id;
UNTIL done
END REPEAT;
CLOSE c_1;
END Block1;
END //
DELIMITER ;
【问题讨论】:
标签: php mysql stored-procedures