mysql call用法:调用存储过程

发布时间:2020-02-02编辑:脚本学堂
本文介绍下,mysql中call语句的用法,学习调用存储过程的方法,有需要的朋友,可以参考下。

在mysql中使用 call语句调用存储过程,是很经常的事,今天分享一段代码,供朋友们参考。

代码:

mysql> CREATE TABLE titles ( //创建mysql表
    ->   titleID int(11),
    ->   title varchar(100),
    ->   subtitle varchar(100),
    ->   edition tinyint(4),
    ->   publID int(11),
    ->   catID int(11),
    ->   langID int(11),
    ->   year int(11),
    ->   isbn varchar(20),
    ->   comment varchar(255),
    ->   ts timestamp,
    ->   authors varchar(255),
    ->   PRIMARY KEY  (titleID)
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO titles VALUES (1,'Linux','Installation',5,1,57,2,2000,NULL,NULL,'2005-02-28 13:34:21','Michael'),
    ->                           (2,'Excel',NULL,NULL,2,3,NULL,2000,NULL,NULL,'2005-02-28 13:34:22','David'),
    ->                           (3,'XML',NULL,NULL,1,2,NULL,1997,NULL,NULL,'2005-02-28 13:34:22','Edwards'),
    ->                           (4,'PHP',NULL,NULL,3,6,NULL,2000,NULL,NULL,'2005-02-28 13:34:22','Tom'),
    ->                           (5,'MySQL','',0,3,34,NULL,2000,'','','2005-02-28 13:34:22','Paul'),
    ->                           (6,'Java',NULL,NULL,4,34,NULL,1999,NULL,NULL,'2005-02-28 13:34:22','Tim');
Query OK, 6 rows affected (0.00 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE publishers ( //创建mysql表
    ->   publID int(11) NOT NULL auto_increment,
    ->   publName varchar(60) collate latin1_german1_ci NOT NULL default '',
    ->   ts timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    ->   PRIMARY KEY  (publID),
    ->   KEY publName (publName)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO publishers VALUES (1,'A','2004-12-02 18:36:58'),
    ->                                 (2,'Apress','2004-12-02 18:36:58'),
    ->                                 (3,'New Riders','2004-12-02 18:36:58'),
    ->                                 (4,'O'Reilly & Associates','2004-12-02 18:36:58'),
    ->                                 (5,'Hanser','2004-12-02 18:36:58');
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> delimiter $$
mysql>
mysql> create PROCEDURE get_title(IN id INT) //创建存储过程
    -> BEGIN
    ->   SELECT title, subtitle, publName FROM titles, publishers WHERE titleID=id AND titles.publID = publishers.publID;
    -> END$$
Query OK, 0 rows affected (0.00 sec)

mysql> create PROCEDURE half(IN a INT, OUT b INT) //创建存储过程
    -> BEGIN
    ->    SET b = a/2;
    -> END$$

mysql> delimiter ;
mysql> CALL get_title(1); //调用存储过程
+-------+--------------+----------+
| title | subtitle     | publName |
+-------+--------------+----------+
| Linux | Installation | A        |
+-------+--------------+----------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

mysql> drop table publishers; //删除表publishers
Query OK, 0 rows affected (0.00 sec)

mysql> drop table titles; //删除表titles
Query OK, 0 rows affected (0.00 sec)