【问题标题】:mysql stored procedure syntax errormysql存储过程语法错误
【发布时间】:2009-04-15 19:32:14
【问题描述】:

好的,这只是我编写的第二个存储过程。我想你会明白的,我正在尝试关闭信用额度,以及所有发票、费用、票据等。但我得到一个语法错误。 目标是调用 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 ;

所以,无论如何,我得到了这个错误: 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 5 行的 '@uid_usr := uid_usr from credit_acc where type_acc = 'init' and credit_used_acc '附近使用正确的语法。

有什么想法吗?

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案1】:
    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 ;
    

    【讨论】:

      【解决方案2】:

      嗯,我不是存储过程方面的专家,但不是吗。

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

      【讨论】:

      • 是的,你是对的,但还有很多错误:)
      猜你喜欢
      • 2012-04-12
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多