你好,谢谢你了,还是不行 我用这个语句都不行,查出来NULLDELIMITER // CREATE PROCEDURE aaa(IN MysqlP_Price decimal,IN PayMode INT,OUT OUTOrderStatus int) BEGIN DECLARE OUTOrderStatus INT(1); SELECT OrderStatus into OUTOrderStatus FROM OrderList WHERE OrderID='20120507000953605783'; END//call aaa('99.00','3',@OUTOrderStatus);
SELECT OrderStatus into OrderStatus FROM OrderList WHERE OrderID=OrderID这个结果不唯一?SELECT OrderStatus into OrderStatus FROM OrderList WHERE OrderID=OrderID limit 1;这样
这个结果唯一的 出来的结果是NULL
select orderstatus from orderlist where orderid ='20120507000953605783';出来的结果只有一行,正确的 +-----------+ |orderstatus| +-----------+ | 3| +-----------+如果用这个 DELIMITER // CREATE PROCEDURE abbBd(IN INOrderID CHAR,OUT OUTOrderStatus int) BEGIN SELECT OrderStatus into OUTOrderStatus FROM OrderList WHERE OrderID=INOrderID; END//call abbBd('20120507000953605783',@b);select @b; 结果就是这样了 +-----------+ | @b| +-----------+ | NULL| +-----------+
如果像这样 DELIMITER // CREATE PROCEDURE abbBdEg(OUT OUTOrderStatus int) BEGIN SELECT OrderStatus into OUTOrderStatus FROM OrderList WHERE OrderID=20120507000953605783; END//call abbBdEg(@b)// SELECT @b//结果就是 +-----------+ | @b| +-----------+ | 3 | +-----------+是正确的,所以应该是 INOrderID 里面没有收到这个值,请问如何处理?是不是我的语句有问题
desc OrderList 贴出来看一下表结构。
把你的参数改为IN INOrderID varchar(30),OUT OUTOrderStatus int
你的这个select查出来不止1行记录,所以出问题了
参数名改下,不要跟表的字段名一样,再试下
CREATE PROCEDURE aaa(IN MysqlP_Price decimal,IN PayMode INT,OUT OUTOrderStatus int)
BEGIN
DECLARE OUTOrderStatus INT(1);
SELECT OrderStatus into OUTOrderStatus FROM OrderList WHERE OrderID='20120507000953605783';
END//call aaa('99.00','3',@OUTOrderStatus);
这个结果唯一的
出来的结果是NULL
+-----------+
|orderstatus|
+-----------+
| 3|
+-----------+如果用这个
DELIMITER //
CREATE PROCEDURE abbBd(IN INOrderID CHAR,OUT OUTOrderStatus int)
BEGIN
SELECT OrderStatus into OUTOrderStatus FROM OrderList WHERE OrderID=INOrderID;
END//call abbBd('20120507000953605783',@b);select @b;
结果就是这样了
+-----------+
| @b|
+-----------+
| NULL|
+-----------+
DELIMITER //
CREATE PROCEDURE abbBdEg(OUT OUTOrderStatus int)
BEGIN
SELECT OrderStatus into OUTOrderStatus FROM OrderList WHERE OrderID=20120507000953605783;
END//call abbBdEg(@b)//
SELECT @b//结果就是
+-----------+
| @b|
+-----------+
| 3 |
+-----------+是正确的,所以应该是 INOrderID 里面没有收到这个值,请问如何处理?是不是我的语句有问题
贴出来看一下表结构。
把你的参数改为IN INOrderID varchar(30),OUT OUTOrderStatus int