文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL - CALL 语句

2023-09-10 13:36

关注

存储过程是存储在 SQL 目录中的子例程、SQL 语句段。这些过程包含 IN 和/或 OUT 参数。如果您使用 SELECT 语句,它们可能会返回结果集;它们可以返回多个结果集。

MySQL的调用语句用于调用/调用存储过程。

语法

以下是 MySQL 中调用语句的语法 -

CALL procedure_name(parameter[param1, param2, ...])

其中procedure_name是您需要调用的现有过程的名称,参数 1 和 param2。是过程接受的参数列表(如果它接受任何参数)。

示例:使用参数调用存储过程

假设我们使用 CREATE 语句在数据库中创建了一个名为 Emp 的表,并在其中插入了三条记录,如下所示 -

mysql> CREATE TABLE Emp (Name VARCHAR(255), Salary INT, Location VARCHAR(255));

假设我们已经创建了一个存储过程 InsertData,它接受名称,薪水和位置值,并将它们作为记录插入到上面的创建(Emp)表中。

mysql> DELIMITER //mysql> Create procedure InsertData (   IN name VARCHAR(30),   IN sal INT,   IN loc VARCHAR(45))      BEGIN         INSERT INTO Emp(Name, Salary, Location) VALUES (name, sal, loc);      END //Query OK, 0 rows affected (0.20 sec)mysql> DELIMITER ;

以下语句调用上面创建的存储过程

mysql> CALL InsertData ('Raju', 35000, 'Bangalore');Query OK, 1 row affected (0.46 sec)mysql> CALL InsertData ('Raman', 45000, 'Vishakhapatnam'); Query OK, 1 row affected (0.22 sec)mysql> CALL InsertData ('Rahman', 55000, 'Hyderabad');Query OK, 1 row affected (0.16 sec)

验证

通过传递所需值调用过程后,您可以验证 Emp 表的内容,如下所示 −

mysql> SELECT * FROM EMP;+--------+--------+---------------+| Name   | Salary | Location      |+--------+--------+---------------+| Raju   | 35000  | Bangalore     || Raman  | 45000  | Visakhapatnam || Rahman | 55000  | Hyderabad     |+--------+--------+---------------+3 rows in set (0.00 sec)

示例:调用不带参数的存储过程

在调用不接受任何参数的存储过程时,我们可以省略括号,如下所示 -

CALL procedure;

假设我们创建了另一个名为 getData 的过程,该过程重试表 EMP 的内容 −

mysql> DELIMITER //mysql> CREATE PROCEDURE getData()   BEGIN      SELECT * FROM EMP;   END//Query OK, 0 rows affected (0.12 sec)mysql> DELIMITER ;

由于此过程不接受参数,因此您可以通过省略参数来调用此过程,如下所示 -

mysql> CALL getData;+--------+--------+---------------+| Name   | Salary | Location      |+--------+--------+---------------+| Raju   | 35000  | Bangalore     || Raman  | 45000  | Visakhapatnam || Rahman | 55000  | Hyderabad     |+--------+--------+---------------+3 rows in set (0.00 sec)Query OK, 0 rows affected (0.01 sec)

示例:调用返回值的存储过程

让我们使用 CREATE 语句在 MySQL 数据库中创建另一个名为“销售”的表,如下所示 −

mysql> CREATE TABLE sales(   ID INT,   ProductName VARCHAR(255),   CustomerName VARCHAR(255),   DispatchDate date,   DeliveryTime time,   Price INT,   Location VARCHAR(255));Query OK, 0 rows affected (2.22 sec)

现在,我们将使用 INSERT 语句在 Sales 表中插入 5 条记录 −

insert into sales values(1, 'Key-Board', 'Raja', DATE('2019-09-01'), TIME('11:00:00'), 7000, 'Hyderabad');insert into sales values(2, 'Earphones', 'Roja', DATE('2019-05-01'), TIME('11:00:00'), 2000, 'Vishakhapatnam');insert into sales values(3, 'Mouse', 'Puja', DATE('2019-03-01'), TIME('10:59:59'), 3000, 'Vijayawada');insert into sales values(4, 'Mobile', 'Vanaja', DATE('2019-03-01'), TIME('10:10:52'), 9000, 'Chennai');insert into sales values(5, 'Headset', 'Jalaja', DATE('2019-04-06'), TIME('11:08:59'), 6000, 'Goa');

我们在数据库中创建了一个名为 getProductPrice 的存储过程,如下所示 −

mysql> DELIMITER //mysql> CREATE PROCEDURE getPrice (   IN in_id INTEGER,   OUT out_ProdName VARCHAR(20),   OUT out_CustName VARCHAR(20),   OUT out_price INTEGER)   BEGIN      SELECT ProductName, CustomerName, Price      INTO out_ProdName, out_CustName, out_price      FROM Sales where id = in_id;   END //Query OK, 0 rows affected (0.24 sec)mysql> DELIMITER ;

此过程接受客户的 ID 作为 IN 参数,并从销售表中返回产品名称(字符串)、客户名称(字符串)和价格(int)值作为 OUT 参数。

要调用具有参数作为参数传递的过程,@parameter_name,请在这些参数中存储输出值。

mysql> CALL getPrice (1, @ProductName, @CustomerName, @Price);Query OK, 1 row affected (0.00 sec)

稍后,您可以打印 mysql 参数的值,如下所示 −

mysql> SELECT @ProductName, @CustomerName, @Price;+--------------+---------------+--------+| @ProductName | @CustomerName | @Price |+--------------+---------------+--------+| Key-Board    | Raja          | 7000   |+--------------+---------------+--------+1 row in set (0.00 sec)

来源地址:https://blog.csdn.net/allway2/article/details/127224653

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯