简体   繁体   English

mysql存储过程语法错误

[英]mysql stored procedure syntax error

Ok, this is only the second stored procedure I've written. 好的,这只是我编写的第二个存储过程。 I think you'll get the idea, I'm trying to close a credit line, and all invoices, charges, notes, etc with it. 我想您会明白的,我正在尝试关闭一个信用额度,以及所有发票,费用,票据等。 But I get a syntax error. 但是我收到语法错误。 The goal is to CALL close_account_proc(398985994) 目标是致电close_account_proc(398985994)

DELIMITER $$

CREATE
    PROCEDURE `cc`.`close_account_proc`(cid INT)
    @uid_usr := uid_usr FROM credit_acc WHERE type_acc = 'init' AND credit_used_acc = cid;
    UPDATE credit_acc SET status_acc = 'closed', void_date_acc = NOW() WHERE credit_used_acc = cid;
    UPDATE payment_acc SET status_acc = 'voided', void_date_acc = NOW()  WHERE creditid_acc = cid;
    UPDATE sbal_sbl SET status_sbl = 'voided', void_date_sbl = NOW()  WHERE credit_used_acc = cid;
    INSERT INTO notes_not SET uid_usr = @uid_usr, initials_not = 'SYS',status_not = 'complete', date_not = NOW(), text_not = 'Closed credit line '.cid;
    UPDATE invoices_inv SET status_inv = 'voided', void_date_inv = NOW()  WHERE credit_used_acc = cid;
    BEGIN
    END$$

DELIMITER ;

So, anway, I get this error: You have an error in your SQL syntax; 所以,我还是收到了这个错误:您的SQL语法有错误; check the manual that corresponds to your MySQL server version for the right syntax to use near '@uid_usr := uid_usr from credit_acc where type_acc = 'init' and credit_used_acc ' at line 5. 检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在credit_acc的'@uid_usr:= uid_usr附近使用,其中type_acc ='init'和credit_used_acc'在第5行。

Any ideas? 有任何想法吗?

DELIMITER $$

CREATE PROCEDURE `cc`.`close_account_proc`(cid INT)
BEGIN
    /* Check that it's what you wanted */
    SELECT  uid_usr
    INTO    @uid_usr
    FROM    credit_acc
    WHERE   type_acc = 'init'
            AND credit_used_acc = cid;

    UPDATE credit_acc SET status_acc = 'closed', void_date_acc = NOW() WHERE credit_used_acc = cid;
    UPDATE payment_acc SET status_acc = 'voided', void_date_acc = NOW()  WHERE creditid_acc = cid;
    UPDATE sbal_sbl SET status_sbl = 'voided', void_date_sbl = NOW()  WHERE credit_used_acc = cid;

    /* Check that it's what you wanted */

    INSERT
    INTO    notes_not (uid_usr, initials_not, status_not, date_not, text_not)
    VALUES  (@uid_usr, 'SYS', 'complete', NOW(), CONCAT('Closed credit line ', cid));

    UPDATE invoices_inv SET status_inv = 'voided', void_date_inv = NOW()  WHERE credit_used_acc = cid;
END
$$

DELIMITER ;

Hmm, im no expert at stored procedures, but isn't it. 嗯,我不是存储过程方面的专家,但不是。

CREATE PROCEDURE `cc`.`close_account_proc`(cid INT)
    BEGIN
        // your stuff
    END$$

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM