MySql - 创建存储函数并调用它

Posted

技术标签:

【中文标题】MySql - 创建存储函数并调用它【英文标题】:MySql - Creating Stored Function and Calling It 【发布时间】:2015-12-04 20:55:55 【问题描述】:

我需要帮助来创建这个特定的存储函数并使用单个 select 语句调用它。以下是我回答的问题。我想我的第一部分是对的,但我不确定。有什么建议/建议吗?对于第二个问题(b 部分),我错误地调用了该函数,并且无法使其显示为问题/b 部分中指定的内容。有什么建议吗?我非常感谢您的帮助。

A 部分)创建一个名为 get_customer_balance 的存储函数,该函数将通过传入会员编号从会员表中返回客户的余额。

我的回答:

DELIMITER $$
CREATE FUNCTION get_customer_balance (membershipNo INT) 
RETURNS dec 
DETERMINISTIC
BEGIN
DECLARE CustBal dec;
SET CustBal = 0;
SELECT balance INTO CustBal  
FROM membership
WHERE membership_id = membershipNo;
RETURN CustBal;
END$$
DELIMITER ; 

Part B question

Membership Table. This is the original table of the problem (for reference guide)

【问题讨论】:

答案在这个帖子link 【参考方案1】:
create table membership
(   membership_id int primary key,
    balance decimal(10,2) not null
);

insert membership(membership_id,balance) values (1,1),(102,11),(103,109.25);

select membership_id,format(get_customer_balance(membership_id),2) as theBalance 
from membership 
where membership_id=102;

+---------------+------------+
| membership_id | theBalance |
+---------------+------------+
|           102 | 11.00      |
+---------------+------------+

Create Proc and Functions上的mysql手册页

调用您的用户定义函数 (UDF) 就像调用任何内置函数一样。即使它涉及到具有别名的表的连接(上面没有显示)。

一个更好的例子是其中有两个表。 membership 表和需要求和的 transaction 表。但这不是你的架构。

你想看这样的东西吗?

【讨论】:

谢谢德鲁!但我注意到你的第一个例子是创建一个表。我需要创建一个函数。我的表已经在数据库中了。 我正在使用您创建的函数,并显示了您没有编写脚本的数据。所以我觉得没有必要重新展示你的功能。我专注于how to call it 的部分......毕竟这是你的问题,不是吗? 我没有得到足够的报酬:P 当您对 Answers 感到满意时,给他们一个绿色复选标记,表示他们已得到回答。即使这意味着等待一两个星期 会的。但是有一个问题。数字 11 不像 b 部分问题中显示的那样显示为 11.00(带零)。知道为什么会这样吗?是不是因为我在 a 部分的陈述中做错了什么?

以上是关于MySql - 创建存储函数并调用它的主要内容,如果未能解决你的问题,请参考以下文章

Mysql:在mysql视图中调用mysql存储过程函数

MySQL存储过程和自定义函数Navicat for mysql创建存储过程和函数调用存储过程和函数的区别

为啥mysql创建存储函数,会是这样报错

MySQL之存储过程创建和调用

存储例程

MySql 错误:无法更新存储函数/触发器中的表,因为它已被调用此存储函数/触发器的语句使用