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 次 |
最近记录: |