2014-09-11 81 views
0

在这段代码中,它总是输出NULL(尽管他们有数据,但没有任何数据)。我试图从2表(customer和order_status)获取id_cust,lastName,addRess。谁能帮我?即时通讯新的SQL。为什么我总是在mySQL中输出为空?

delimiter // 
#drop procedure if exists GetOrderStatus 
create procedure GetOrderStatus(IN id_cust INT, 
           OUT lastName VARCHAR(45), 
           OUT o_number INT, 
           OUT addRess VARCHAR(45)) 
begin 
declare id_cust INT; 
declare lastName VARCHAR(45); 
declare addRess VARCHAR(45); 
declare ci_ty VARCHAR(45); 
declare dscrption VARCHAR(45); 
declare o_number INT; 
declare order_stts VARCHAR(45); 
declare total_item INT; 
declare reMarks VARCHAR(45); 

declare curs cursor for 
select c.c_id,o.order_no,o.o_status,o.item_total,c.description,o.remarks,c.lname 
from order_status o, customer c; 
open curs; 
fetch curs into id_cust,o_number,order_stts,total_item,dscrption,reMarks,lastName; 

select id_cust,lastName,addRess from customer 
where id_cust > 2 
and customer.id_cust = order_status.id_cust; 
end 

回答

0
create procedure GetOrderStatus(IN id_cust INT, 
           OUT olastName VARCHAR(45), 
           OUT out_number INT, 
           OUT oaddRess VARCHAR(45)) 
begin 

select c.c_id, c.lname, c.address 
INTO id_cust, olastName, oaddRess from customer AS c 
JOIN order_status AS o -- JOIN the customers and orders table together based on cust num 
ON c.id_cust = o.id_cust 
where c.c_id=id_cust; 
end 

我觉得你的路要走。根本不需要使用游标,只需根据客户ID在两个表之间进行简单的JOIN即可。我猜你在客户表中有一个地址字段,这就是为什么你会看到@addRess=c.address
我猜这个函数应该根据订单号得到订单状态。另外,对于输出参数,不需要声明单独的变量来存储它们。简单地将它们存储在输出变量传递`@ nameOfOutputVariable = someValue中

让我知道这是没有意义的,

肖恩

+0

你为什么putthe字“输出”在@address VARCHAR(45 )输出?请给我解释.. – 2014-09-11 04:53:02

+0

为什么sql说我在线1上有错误代码1064,它是“创建过程GetOrderStatus(@id_cust INT,...” – 2014-09-11 06:18:23

+0

对不起,我以为你使用的是T_SQL,但是你正在使用MySQL。我已经适当地修改了SQL。 – 2014-09-11 13:45:44