2016-04-26 80 views
0

語法所以我想在使用過程插入數據庫之前計算總成本。整個想法是檢查,如果逾期付款爲null,則不是null,如果該值是0MYSQL:創建程序錯誤與插入

到目前爲止,我有這樣的:

DELIMITER;; 
    CREATE OR REPLACE PROCEDURE add_transaction 
    (IN accTransactionId INT(11), IN auctionId INT(11), IN chittyAccNo INT(11), IN `date` DATETIME, IN amount DOUBLE, IN description VARCHAR(50), 
    IN transref VARCHAR(50), IN tranStat TINYINT, IN clearDate DATETIME, IN methodPaid DATETIME) 
    BEGIN 
     DECLARE latePayment int(11); 
     DECLARE total AS DOUBLE; 

     SELECT `LatePaymentFee` 
     INTO `latePayment` 
     FROM chittyusers 
     WHERE ChittyAccNo = NEW.ChittyAccNo; 

     CASE 
      WHEN latePayment IS NULL 
     THEN 
      SET total = amount ; 

      WHEN latePayment IS NOT NULL 
     THEN 
      SET total = amount + latePayment; 
     ELSE 
      SET total = amount; 
     END; 
     END CASE; 

     INSERT INTO `chittytransactions` (`ChittyTransactionID`, `AuctionID`, `ChittyAccNo`, `Date`, `Amount`, 
     `Description`, `TransRefence`, `TransStatus`, `ClearanceDate`, `PaymentMethod`) 
     VALUES (accTransactionId, auctionId, chittyAccNo, `date`, amount, description, transref, tranStat, clearDate, methodPaid) 

    END;; 
DELIMiTER; 

當我試圖創建此過程我得到SQL語法錯誤:

MySQL said: Documentation

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 5

我做錯了什麼,什麼可以改變。剛開始使用這些,所以我不完全瞭解他們如何工作。

此外,如果你需要的數據庫,這是它:

CREATE TABLE `chittytransactions` (
    `ChittyTransactionID` int(11) NOT NULL, 
    `AuctionID` int(11) NOT NULL, 
    `ChittyAccNo` int(11) DEFAULT NULL, 
    `Date` datetime DEFAULT NULL, 
    `Amount` double DEFAULT NULL, 
    `Description` varchar(50) DEFAULT NULL, 
    `TransRefence` varchar(50) DEFAULT NULL COMMENT 'Reference from actual Bank transaction', 
    `TransStatus` tinyint(1) DEFAULT NULL COMMENT 'If Transaction Pending or Cleared', 
    `ClearanceDate` datetime DEFAULT NULL, 
    `PaymentMethod` int(1) DEFAULT NULL COMMENT '0- Cash, 1- bank transfer, 2- personal credit etc' 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
CREATE TABLE `chittyusers` (
    `ChittyAccNo` int(11) NOT NULL, 
    `UserId` int(11) NOT NULL, 
    `ChittyID` int(11) NOT NULL, 
    `LatePaymentFee` int(11) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

感謝任何幫助將是巨大的

+0

沒有您在執行此代碼之前更改分隔符,如'delimiter |創建過程...結束|'? –

+0

沒有不認爲我需要在創建過程時指定分隔符嗎.. – luffy

+0

好吧我只是添加了,我仍然在其他命令上出現語法錯誤。你能否看看並告訴我你認爲整個事情是錯誤的。 – luffy

回答

4
  • 分隔符是需要
  • 「創建或替換」似乎並不被接受
  • 有一個額外的「定義爲」在變量聲明
  • 有一個額外的「結束」前「結束的情況下」
  • 有在最後插入的末尾缺少分號

這似乎是公認的:

drop procedure if exists add_transaction; 
delimiter $$ 
CREATE PROCEDURE add_transaction 
(IN accTransactionId INT(11), IN auctionId INT(11), IN chittyAccNo INT(11), IN `date` DATETIME, IN amount DOUBLE, IN description VARCHAR(50), 
IN transref VARCHAR(50), IN tranStat TINYINT, IN clearDate DATETIME, IN methodPaid DATETIME) 
BEGIN 
    DECLARE latePayment int(11); 
    DECLARE total DOUBLE; 

    SELECT `LatePaymentFee` 
    INTO `latePayment` 
    FROM chittyusers 
    WHERE ChittyAccNo = NEW.ChittyAccNo; 

    CASE 
     WHEN latePayment IS NULL 
    THEN 
     SET total = amount ; 

     WHEN latePayment IS NOT NULL 
    THEN 
     SET total = amount + latePayment; 
    ELSE 
     SET total = amount; 
    END CASE; 

    INSERT INTO `chittytransactions` (`ChittyTransactionID`, `AuctionID`, `ChittyAccNo`, `Date`, `Amount`, 
    `Description`, `TransRefence`, `TransStatus`, `ClearanceDate`, `PaymentMethod`) 
    VALUES (accTransactionId, auctionId, chittyAccNo, `date`, amount, description, transref, tranStat, clearDate, methodPaid); 

END; 
$$ 
+0

@ juergen-d是的,我確實使用MySQL Workbench來驗證和測試,這確實非常有幫助。 – ddirect

+0

我應該開始使用它。我可以得到它的MacBook? – luffy

+0

請點擊這裏:http://dev.mysql.com/downloads/workbench – ddirect