mySQL工作台中的存储过程(INSERT INTO错误)

时间:2017-11-09 18:34:47

标签: mysql sql insert-into

我在存储过程中遇到错误,经过大量的YT视频和论坛后,我仍然不知道我哪里出错了。鉴于我正在尝试做的事情,这一切似乎都是正确的。

这是交易。我收集一些信息来购买一些股票,我使用IF确保我有足够的钱购买,然后我将购买信息插入我的TRADES表并更新现金余额在ACCOUNTS中反映了$$的支出。

我甚至无法测试它是否正常工作,因为它无法运行。我收到的唯一错误是INSERT INTO,其中显示error: INTO (into) is not valid input at this position

我以完全相同的方式完成了所有插入语句,并且不知道为什么这个特定的语法不正确?任何帮助将不胜感激!以下是两种方法,都有错误。

CREATE PROCEDURE `BUY` (TID INT,ID INT, CASH INT, T_NAME VARCHAR(4) , 
TCOUNT INT, TBUYDATE DATE, TBUYPRICE INT  )

BEGIN

IF (ACCOUNT.CASH_BALANCE >= (TCOUNT * TBUYPRICE), 

INSERT INTO TRADES (TRADE_ID, ACCOUNT_ID, TRADE_NAME, TRADE_COUNT, TRADE_BUYDATE, TRADE_BUYPRICE) 

VALUES (TID, ID, T_NAME, TCOUNT, TBUYDATE, TBUYPRICE) 

AND UPDATE ACCOUNT.CASH_BALANCE  

WHERE ACCOUNT.ACCOUNT_ID = ID
SET ACCOUNT.CASH_BALANCE = (ACCOUNT.CASH_BALANCE - (TCOUNT * TBUYPRICE)),

NULL

)




END

我也尝试过以下操作,但是我在END missing subclause or other elements before end

上收到错误
CREATE PROCEDURE `BUY` (TID INT,ID INT, CASH INT, T_NAME VARCHAR(4) , TCOUNT 
INT, TBUYDATE DATE, TBUYPRICE INT  )

BEGIN

IF (ACCOUNT.CASH_BALANCE >= (TCOUNT * TBUYPRICE))

THEN 
INSERT INTO TRADES (TRADE_ID, ACCOUNT_ID, TRADE_NAME, TRADE_COUNT, 
TRADE_BUYDATE, TRADE_BUYPRICE) 
VALUES (TID, ID, T_NAME, TCOUNT, TBUYDATE, TBUYPRICE);
UPDATE ACCOUNT.CASH_BALANCE  
SET ACCOUNT.CASH_BALANCE = (ACCOUNT.CASH_BALANCE - (TCOUNT * TBUYPRICE))
WHERE ACCOUNT.ACCOUNT_ID = ID;

ELSE #noinsert


END

1 个答案:

答案 0 :(得分:0)

有多个错误/更正:

  • 未使用Delimiter命令,因此他在语句结束和过程定义结束时感到困惑
  • 需要在存在语句中选择帐户表
  • 我使用了本地变量l_cash而不是重复TCOUNT * TBUYPRICE(不是错误)。
  • ELSE声明不是必需的,也是END IF;失踪了。
  • 更正了更正声明。

以下是更正后的代码:

DELIMITER $$
CREATE PROCEDURE `BUY` (TID INT,ID INT, CASH INT, T_NAME VARCHAR(4) , TCOUNT 
INT, TBUYDATE DATE, TBUYPRICE INT)

BEGIN
DECLARE l_cash INT DEFAULT 0;
SET l_cash = TCOUNT * TBUYPRICE;

IF EXISTS(SELECT 1 FROM Account WHERE ACCOUNT_ID = ID AND CASH_BALANCE >= l_cash) THEN 

INSERT INTO TRADES (TRADE_ID, ACCOUNT_ID, TRADE_NAME, TRADE_COUNT, 
TRADE_BUYDATE, TRADE_BUYPRICE) 
VALUES (TID, ID, T_NAME, TCOUNT, TBUYDATE, TBUYPRICE);

UPDATE ACCOUNT 
SET CASH_BALANCE = (CASH_BALANCE - l_cash)
WHERE ACCOUNT_ID = ID;

END IF;

END$$
DELIMITER ;