我试图编码存储的优先级来管理公司的树叶,因为树叶应定期记入每位员工。我使用的表我的Sql存储的优先级不能正常工作
erp_leave_policy => Describing Leave policy,
erp_employees => Describing Employees,
erp_clients => Describing Employees are belonged to which Client,
erp_employee_leave_policy => Describing leave policy of employees.
我使用下面的查询与我的存储过程
SELECT lpc_id,emp_id FROM erp_leave_policy,erp_employees,erp_clients,erp_employee_leave_policy
WHERE emp_status=1 AND cli_status=1 AND lpc_status=1 AND
emp_id = elp_fk_employees AND lpc_id = elp_fk_leave_policy AND cli_id = emp_fk_clients;
而且它工作正常,没有问题。
但在我的存储过程,这种查询是行不通的。我正在使用codeigniter。我的代码如下。
$this->db->query("DROP FUNCTION IF EXISTS inserter;");
$q = " CREATE FUNCTION inserter(emp_id bigint,lpc_id int) RETURNS boolean DETERMINISTIC
BEGIN
INSERT INTO aaa_test (aaa_lpc_id,aaa_emp_id) VALUES (lpc_id, emp_id);
RETURN 1;
END;";
$this->db->query($q);
$this->db->query("DROP PROCEDURE IF EXISTS start_credit_test;");
$q = " CREATE PROCEDURE start_credit_test()
BEGIN
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE lpc_id INT(11) DEFAULT 0;
DECLARE emp_id BIGINT(20) DEFAULT 0;
DEClARE emp_cursor CURSOR FOR
SELECT lpc_id,emp_id FROM erp_leave_policy,erp_employees,erp_clients,erp_employee_leave_policy
WHERE emp_status=1 AND cli_status=1 AND lpc_status=1 AND
emp_id = elp_fk_employees AND lpc_id = elp_fk_leave_policy AND cli_id = emp_fk_clients;
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET v_finished = 1;
OPEN emp_cursor;
get_emp: LOOP
FETCH emp_cursor INTO lpc_id,emp_id;
IF v_finished = 1 THEN
LEAVE get_emp;
END IF;
inserter(emp_id,lpc_id);
END LOOP get_emp;
CLOSE emp_cursor;
END ";
$this->db->query($q);
$query = $this->db->query("CALL start_credit_test();");
该错误是如下
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 '(emp_id,lpc_id); END LOOP get_emp; CLO' at line 27
CREATE PROCEDURE start_credit_test() BEGIN DECLARE v_finished INTEGER DEFAULT 0; DECLARE lpc_id INT(11) DEFAULT 0; DECLARE emp_id BIGINT(20) DEFAULT 0; DEClARE emp_cursor CURSOR FOR SELECT lpc_id,emp_id FROM erp_leave_policy,erp_employees,erp_clients,erp_employee_leave_policy WHERE emp_status=1 AND cli_status=1 AND lpc_status=1 AND emp_id = elp_fk_employees AND lpc_id = elp_fk_leave_policy AND cli_id = emp_fk_clients; DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1; OPEN emp_cursor; get_emp: LOOP FETCH emp_cursor INTO lpc_id,emp_id; IF v_finished = 1 THEN LEAVE get_emp; END IF; inserter(emp_id,lpc_id); END LOOP get_emp; CLOSE emp_cursor; END
我尝试这个代码而不调用函数插入器()通过用
INSERT INTO aaa_test (aaa_lpc_id,aaa_emp_id) VALUES (lpc_id, emp_id);
现在没有显示错误替换inserter(emp_id,lpc_id);
。但是没有任何内容被插入到表aaa_test中。 同样当在CREATE PROCEDURE start_credit_test()
之前使用DELIMITER //
,并且当我拨打$this->db->query()
时,它也会显示错误。例如
$q = " DELIMITER //
CREATE PROCEDURE start_credit_test()
BEGIN
.........
.............";
$this->db->query($q);
错误如下
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 'DELIMITER // CREATE PROCEDURE start_credit_test() BEGI' at line 1
所以,可以请你帮
的函数必须是选择语句的一部分。 –