运行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)
-> 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)
如果在ORACLE中就要用游标了:)
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我想可以解决你的问题
select count(*) from ...
结果集里只会有一条记录啊,怎么会错了呢?