Mysql

MySQL 創建全域常式(儲存過程和/或函式)的可能性

  • September 1, 2021

是否有可能以某種方式定義全域可用的常式?似乎每個常式都必須在數據庫的範圍內創建。

當我嘗試從控制台創建常式(沒有事先發布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()函式的返回值返回定義常式的模式的名稱,而不是會話的目前數據庫. 當常式退出時它會變回,因此如果在觸發器中使用,它不會破壞它周圍的任何東西,但是如果您需要知道,您無法從常式內部知道目前數據庫是什麼。

引用自:https://dba.stackexchange.com/questions/50678