不选择执行函数

Poi*_*ike 4 mysql function

我有两个函数 - 一个用于设置变量,一个用于查看它。这个想法是在视图中使用变量。

我对函数真的很陌生。无论如何,这就是他们应该做的:

获取站点 ID:

BEGIN
#Routine body goes here...
RETURN @siteContext;
END
Run Code Online (Sandbox Code Playgroud)

设置站点 ID:

BEGIN
    #Routine body goes here...
set @siteContext := SiteId;
    RETURN @siteContext;
END
Run Code Online (Sandbox Code Playgroud)

它有一个 SiteId 的 int 参数。

但是当我尝试执行它们时,出现错误。

我像这样执行它们:

SetSiteId(1);
select GetSiteId();
Run Code Online (Sandbox Code Playgroud)

如果我对 SetSiteId 执行选择,它工作正常,但我不想看到它,我只想看到 GetSiteId 的结果,它应该是 1。

我想也许有一个特定的关键字来执行该函数,但我找不到任何关键字,谷歌也没有帮助。我怀疑我的做法可能全错了,但我不明白这是怎么回事——这似乎应该是世界上执行函数最简单的事情。

我得到的非常无用的错误是这样的:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行“SetSiteId(1)”附近使用的正确语法

O. *_*nes 7

MySQL 中存储的代码分为三种基本类型:

  1. 存储功能——你拥有什么
  2. 存储过程
  3. 事件(暂时不用管这些)。

函数返回一个值。因此,需要从可以接受该值的上下文中调用它。因此,您可以使用

SET @something := YOUR_FUNCTION(param, param);
Run Code Online (Sandbox Code Playgroud)

或者

SELECT YOUR_FUNCTION(param, param)
Run Code Online (Sandbox Code Playgroud)

存储过程返回结果集(或者不返回结果集)。它被称为

 CALL YOUR_PROCEDURE(param, param)
Run Code Online (Sandbox Code Playgroud)

因此,您可以像这样调用第一个存储函数:

 SET @junk := SetSiteId(1);
Run Code Online (Sandbox Code Playgroud)

或者您可以使用 SELECT 调用它并忽略结果集。