DELIMITER // CREATE PROCEDURE usp_openAccount(IN cName char(8), IN PID VARchar(18),IN tel char(20), IN oMoney decimal(20,2),IN sName VARchar(20),IN addr varchar(50)) BEGIN DECLARE sID INT; DECLARE cur_id INT; SELECT savingID INTO sID FROM depoist WHERE savingName= sName; CALL usp_randCardID(@cardId); INSERT INTO userInfo(customerName,PID,telephone,address ) VALUES(cName,PID,tel,addr); SELECT customerID INTO cur_id FROM userInfo WHERE customerName=CName; INSERT INTO cardInfo(cardID,savingID,openMoney,balance,customerID) VALUES(@cardId,sID,oMoney,openMoney,cur_ID); END // DELIMITER ; select * from view_userInfo ORDER BY `客户编号`; select * from view_customerid ORDER BY `客户名字`; CALL usp_openAccount('王小六','554455881017878153','0999-67891234',1,'活期','山东某某市'); select * from view_userInfo ORDER BY `客户名字`; select * from view_cardInfo ORDER BY `客户名字`;哪里有问题
时间: 2024-02-01 19:03:36 浏览: 123
mysql实现char类型主键自增长
5星 · 资源好评率100%
这段代码中存在以下问题:
1. 存储过程中的变量声明不完整,缺少了一部分。
2. 存储过程中的参数名与调用时的参数名不一致,需要保持一致。
3. 存储过程中的第7行应该是 `SELECT savingID INTO sID FROM deposit WHERE savingName = sName;`,而不是 `SELECT savingID INTO sID FROM depoist WHERE savingName= sName;`,存在拼写错误。
4. 存储过程中的第8行应该是 `CALL usp_randCardID(@cardId);`,而不是 `CALL usp_randCardID(cardId);`,需要添加 `@` 符号。
5. 存储过程中的第11行应该是 `INSERT INTO cardInfo(cardID,savingID,openMoney,balance,customerID) VALUES(@cardId,sID,oMoney,oMoney,cur_id);`,而不是 `INSERT INTO cardInfo(cardID,savingID,openMoney,balance,customerID) VALUES(@cardId,sID,oMoney,openMoney,cur_ID);`,需要将 `openMoney` 改为 `oMoney`,因为 `openMoney` 并没有定义。
6. 存储过程中的变量名需要保持一致,例如 `cur_id` 和 `CName` 应该都是小写。
7. 存储过程中的第2行和第3行的变量类型应该保持一致,例如 `IN PID varChar(18)` 应该改为 `IN PID varchar(18)`。
修改后的代码如下:
```
DELIMITER //
CREATE PROCEDURE usp_openAccount(
IN cName VARCHAR(8),
IN pID VARCHAR(18),
IN tel VARCHAR(20),
IN oMoney DECIMAL(20,2),
IN sName VARCHAR(20),
IN addr VARCHAR(50)
)
BEGIN
DECLARE v_sID INT;
DECLARE v_cur_id INT;
SELECT savingID INTO v_sID FROM deposit WHERE savingName = sName;
CALL usp_randCardID(@cardId);
INSERT INTO userInfo(customerName, PID, telephone, address) VALUES(cName, pID, tel, addr);
SELECT customerID INTO v_cur_id FROM userInfo WHERE customerName = cName;
INSERT INTO cardInfo(cardID, savingID, openMoney, balance, customerID) VALUES(@cardId, v_sID, oMoney, oMoney, v_cur_id);
END//
DELIMITER ;
```
同时,最后一行的存储过程调用也应该添加 `DELIMITER` 和 `CALL` 语句,如下所示:
```
DELIMITER //
CALL usp_openAccount('王小六', '554455881017878153', '0999-67891234', 1, '活期', '山东某某市');
DELIMITER ;
```
另外,如果这段代码存在其他问题,还需要针对具体问题进行修改。
阅读全文