运行mysql.exe,输入下边这一端mysql> delimiter //mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
    -> BEGIN
    ->   SELECT COUNT(*) INTO param1 FROM t;
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)然后到mysql库中去看,你会发现多了一个叫proc的表,它就是用来保存存储过程的,参数和过程体是分开存的,还有其它一些字段,看一看你就知道了。调用方式如下,但是只能调用一次。mysql> CALL simpleproc(@a)//
Query OK, 0 rows affected (0.00 sec)mysql> SELECT @a//
+------+
| @a   |
+------+
| 3    |
+------+
1 row in set (0.00 sec)

解决方案 »

  1.   

    不知道MYSQL的存储过程是怎样处理查询结果的,但在其它的数据库中一般是不能把多记录的结果集放到一个变量里面的,提示似乎就是说结果集有多条记录。
    如果在ORACLE中就要用游标了:)
      

  2.   

    刚去看了一下官方的说明,有游标的概念,下面是官方提供说明:19.1.8 CursorsSimple cursors are supported inside stored procedures and functions. The syntax is as in embedded SQL. Cursors are currently asensitive, read-only, and non-scrolling. Asensitive means that the server may or may not make a copy of its result table. For example: CREATE PROCEDURE curdemo()
    BEGIN
      DECLARE done INT DEFAULT 0;
      DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
      DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;
      DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
      DECLARE a CHAR(16);
      DECLARE b,c INT;  OPEN cur1;
      OPEN cur2;  REPEAT
        FETCH cur1 INTO a, b;
        FETCH cur2 INTO c;
        IF NOT done THEN
           IF b < c THEN
              INSERT INTO test.t3 VALUES (a,b);
           ELSE
              INSERT INTO test.t3 VALUES (a,c);
           END IF;
        END IF;
      UNTIL done END REPEAT;  CLOSE cur1;
      CLOSE cur2;
    END我想可以解决你的问题
      

  3.   

    对了,我写的是
    select count(*) from ...
    结果集里只会有一条记录啊,怎么会错了呢?