Mysql 使用游标的存储过程 returns null
Mysql stored procedure using cursor returns null
代码如下:当我调用noemail时returns null,请问是怎么回事?
还有一个空的cust_email(见table客户),但是return什么都没有,应该是return一个cust_name,哪一部分是错误的?谢谢。
DELIMITER $$
USE a_schema_in_mysql $$
create procedure noemail()
begin
declare cust_name char;
declare custcursor cursor for
select cust_name from customers where cust_email is null;
open custcursor;
loop
fetch custcursor into cust_name;
select concat('Null email host is',cust_name) as noemailcust;
end loop;
close custcursor;
end$$
DELIMITER ;
select * from customers;
+------------+---------------+----------------------+-----------+------------+
| cust_id | cust_name | cust_address | cust_city | cust_state |
+------------+---------------+----------------------+-----------+------------+
| 1000000001 | Village Toys | 200 Maple Lane | Detroit | MI |
| 1000000002 | Kids Place | 333 South Lake Drive | Columbus | OH |
| 1000000003 | Fun4All | 1 Sunny Place | Muncie | IN |
| 1000000004 | Fun4All | 829 Riverside Drive | Phoenix | AZ |
| 1000000005 | The Toy Store | 4545 53rd Street | Chicago | IL |
+------------+---------------+----------------------+-----------+------------+
+----------+--------------+--------------------+-----------------------+
| cust_zip | cust_country | cust_contact | cust_email |
+----------+--------------+--------------------+-----------------------+
| 44444 | USA | John Smith | sales@villagetoys.com |
| 43333 | USA | Michelle Green | NULL |
| 42222 | USA | Jim Jones | jjones@fun4all.com |
| 88888 | USA | Denise L. Stephens | dstephens@fun4all.com |
| 54545 | USA | Kim Howard | kim@thetoystore.com |
+----------+--------------+--------------------+-----------------------+
错误如下:
mysql> call noemail;
+-------------+
| noemailcust |
+-------------+
| NULL |
+-------------+
1 row in set (0.00 sec)
ERROR 1329 (02000): No data - zero rows fetched, selected, or processed
帮帮我,谢谢!
我假设您可以在不使用光标的情况下实现您想要的效果
DELIMITER $$
USE a_schema_in_mysql $$
create procedure noemail()
begin
select concat('Null email host is',cust_name) from customers where cust_email is null;
end$$
DELIMITER ;
您正在使用相同的名称 "cust_name",这也是您的列名。
当参数名或变量名与字段名冲突时,使用参数名或变量名。
我正在添加编辑:
DELIMITER $$
USE a_schema_in_mysql $$
create procedure noemail()
begin
declare cust_name_s char;
declare custcursor cursor for
select cust_name from customers where cust_email is null;
open custcursor;
loop
fetch custcursor into cust_name_s;
select concat('Null email host is',cust_name_s) as noemailcust;
end loop;
close custcursor;
end$$
DELIMITER ;
代码如下:当我调用noemail时returns null,请问是怎么回事?
还有一个空的cust_email(见table客户),但是return什么都没有,应该是return一个cust_name,哪一部分是错误的?谢谢。
DELIMITER $$
USE a_schema_in_mysql $$
create procedure noemail()
begin
declare cust_name char;
declare custcursor cursor for
select cust_name from customers where cust_email is null;
open custcursor;
loop
fetch custcursor into cust_name;
select concat('Null email host is',cust_name) as noemailcust;
end loop;
close custcursor;
end$$
DELIMITER ;
select * from customers;
+------------+---------------+----------------------+-----------+------------+
| cust_id | cust_name | cust_address | cust_city | cust_state |
+------------+---------------+----------------------+-----------+------------+
| 1000000001 | Village Toys | 200 Maple Lane | Detroit | MI |
| 1000000002 | Kids Place | 333 South Lake Drive | Columbus | OH |
| 1000000003 | Fun4All | 1 Sunny Place | Muncie | IN |
| 1000000004 | Fun4All | 829 Riverside Drive | Phoenix | AZ |
| 1000000005 | The Toy Store | 4545 53rd Street | Chicago | IL |
+------------+---------------+----------------------+-----------+------------+
+----------+--------------+--------------------+-----------------------+
| cust_zip | cust_country | cust_contact | cust_email |
+----------+--------------+--------------------+-----------------------+
| 44444 | USA | John Smith | sales@villagetoys.com |
| 43333 | USA | Michelle Green | NULL |
| 42222 | USA | Jim Jones | jjones@fun4all.com |
| 88888 | USA | Denise L. Stephens | dstephens@fun4all.com |
| 54545 | USA | Kim Howard | kim@thetoystore.com |
+----------+--------------+--------------------+-----------------------+
错误如下:
mysql> call noemail;
+-------------+
| noemailcust |
+-------------+
| NULL |
+-------------+
1 row in set (0.00 sec)
ERROR 1329 (02000): No data - zero rows fetched, selected, or processed
帮帮我,谢谢!
我假设您可以在不使用光标的情况下实现您想要的效果
DELIMITER $$
USE a_schema_in_mysql $$
create procedure noemail()
begin
select concat('Null email host is',cust_name) from customers where cust_email is null;
end$$
DELIMITER ;
您正在使用相同的名称 "cust_name",这也是您的列名。 当参数名或变量名与字段名冲突时,使用参数名或变量名。
我正在添加编辑:
DELIMITER $$
USE a_schema_in_mysql $$
create procedure noemail()
begin
declare cust_name_s char;
declare custcursor cursor for
select cust_name from customers where cust_email is null;
open custcursor;
loop
fetch custcursor into cust_name_s;
select concat('Null email host is',cust_name_s) as noemailcust;
end loop;
close custcursor;
end$$
DELIMITER ;