MySQL 创建全局例程(存储过程和/或函数)的可能性

bak*_*ytn 8 mysql trigger stored-procedures functions

是否有可能以某种方式定义全局可用的例程?似乎每个例程都必须在数据库范围内创建。

当我尝试从控制台创建一个例程(没有事先发布use dbname)时,我收到一个错误:

ERROR 1046 (3D000): No database selected

我们有大量相同的数据库(数据不同),目标是为某些表名创建一些触发器。但是我们只想运行一个例程,所以我们不必为每个数据库创建这些例程(因为它们是相同的,例程对每个数据库的工作方式相同)。

Mic*_*bot 14

无法定义全局的存储过程或存储函数(或事件)。

一种方法是创建一个共享的公共模式,然后使用该模式的名称 ( CALL shared.the_procedure();)限定对函数和过程的调用。

这是我用我的自定义日期/时间计算函数(例如,SELECT date_time.next_quarter_start_after(NOW()))和非常方便的common_schema框架所做的事情,当然,它存在于 `common_schema` 中。

如果采用这种方法,则必须记住,当例程运行时,“当前”数据库会自动更改,并且DATABASE()函数的返回值返回定义例程的模式名称,而不是会话的当前数据库. 当例程退出时它会变回来,所以如果在触发器中使用,它不会破坏它周围的任何东西,但是如果你需要知道的话,你无法从例程内部知道当前数据库是什么。


归档时间:

查看次数:

5957 次

最近记录:

4 年 前