MySql 程序错误:1242
Posted
技术标签:
【中文标题】MySql 程序错误:1242【英文标题】:MySql procedure error:1242 【发布时间】:2015-01-07 16:07:12 【问题描述】:我是 sql 的初学者.. 我想让过程像 oracle 中的序列一样 制作过程,遇到错误:1242...请帮帮我~
目标表
创建表 id_generator (
seq_currval INT(8) UNSIGNED NOT NULL, org_code varchar(4) not null
);
程序
分隔符 $$
如果存在则删除过程 sp_seq$$
创建过程 sp_seq(IN org_code varchar(4), OUT parma1 VARCHAR(11))
开始
DECLARE year VARCHAR(1); DECLARE month VARCHAR(2); DECLARE seq_current int; SET year = '5'; SET month = '01'; SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
START TRANSACTION;
SET seq_current = (select seq_currval
from id_generator
where org_code = org_code);
update id_generator
set seq_currval = seq_current + 1 where org_code = org_code;
COMMIT;
SET seq_current = seq_current + 1;
select CONCAT(year, month ,seq_current);
结束$$
分隔符;
调用程序后,我发现错误:1242:
调用 sp_seq('1234');
--> 错误:错误代码:1242。子查询返回多于 1 行
【问题讨论】:
您设置 seq_current 的子查询有问题(因为它返回多行)。我对 mysql 语法不够熟悉,但我猜它与您使用的参数名称有关...尝试将其更改为例如 vorg_code(数据类型,然后是变量名称) 【参考方案1】:这个查询
SET seq_current = (select seq_currval
from id_generator
where org_code = org_code);
返回多条记录,并且不能存储在单个变量中。
where org_code = org_code
总是正确的。将输入参数重命名为列名以外的其他名称。否则数据库无法区分它们。
【讨论】:
【参考方案2】:这个查询
select seq_currval
from id_generator
where org_code = org_code
总是返回与 1=1 相似的所有行
改成:
select seq_currval
from id_generator
where id_generator.org_code = org_code
【讨论】:
以上是关于MySql 程序错误:1242的主要内容,如果未能解决你的问题,请参考以下文章
SQL 从带有子查询的多个表中选择数据(包括来自内部连接的数据)错误:1242