首页 文章

MySql程序错误:1242

提问于
浏览
0

我是sql的初学者..我想让程序像oracle中的序列一样
制作程序,我遇到错误:1242 ...请帮帮我〜


  • 目标表

CREATE TABLE id_generator(seq_currval INT(8)UNSIGNED NOT NULL,
org_code varchar(4)not null
);

  • 程序

delimiter $$ DROP PROCEDURE IF EXISTS sp_seq $$ CREATE PROCEDURE sp_seq(IN org_code varchar(4),OUT parma1 VARCHAR(11))BEGIN DECLARE year VARCHAR(1);
DECLARE月份VARCHAR(2);
DECLARE seq_current int;
SET year ='5';
SET月='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);

END $$分隔符;

  • 呼叫程序后,我发现错误:1242:

CALL sp_seq('1234'); - >错误:错误代码:1242 . 子查询返回超过1行

2 回答

  • 0

    这个查询

    SET seq_current = (select seq_currval 
                          from id_generator 
                          where org_code = org_code);
    

    返回多个记录,不能存储在单个变量中 .

    where org_code = org_code
    

    总是如此 . 将输入参数重命名为列名以外的其他参数 . 否则DB无法区分它们 .

  • 0

    这个查询

    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
    

相关问题