Mysql
MySQL 創建全域常式(儲存過程和/或函式)的可能性
是否有可能以某種方式定義全域可用的常式?似乎每個常式都必須在數據庫的範圍內創建。
當我嘗試從控制台創建常式(沒有事先發布
use dbname
)時,我收到一個錯誤:
ERROR 1046 (3D000): No database selected
我們有大量相同的數據庫(數據不同),目標是為某些表名創建一些觸發器。但是我們只想執行一個常式,因此我們不必為每個數據庫創建這些常式(因為它們是相同的,常式對於每個數據庫的工作方式都是一樣的)。
無法定義全域的儲存過程或儲存函式(或事件)。
一種方法是創建一個共享的公共模式,然後使用該模式的名稱 (
CALL shared.the_procedure();
) 限定對函式和過程的呼叫。這是我使用我的自定義日期/時間計算函式集合(例如,
SELECT date_time.next_quarter_start_after(NOW())
)和非常方便的common_schema框架所做的事情,當然,它存在於common_schema
中。如果您採用這種方法,您必須記住,當常式執行時,“目前”數據庫會自動更改,並且
DATABASE()
函式的返回值返回定義常式的模式的名稱,而不是會話的目前數據庫. 當常式退出時它會變回,因此如果在觸發器中使用,它不會破壞它周圍的任何東西,但是如果您需要知道,您無法從常式內部知道目前數據庫是什麼。