概述
函數是在資料庫內定義的子程式,可以從內建 SQL 語句中調用函數。如果內建的函數不能滿足業務需求,則可以通過 ODC 建立函數,添加自訂函數,以實現某些功能運算和完成各種特定操作,且自訂函數可以減少重複編碼,提高程式可讀性。
函數是一種與預存程序十分相似的過程式資料庫物件。與預存程序一樣,都是由 SQL 語句和過程式語句組成的程式碼片段,並且可以被應用程式和其他 SQL 語句調用。
自訂函數與預存程序的區別:
函數有且僅有一個返回,適合做處理資料後返回一個結果;預存程序可有 0 個或多個返回,適合做批量插入、批次更新。
可以直接通過
SELECT語句調用函數,而預存程序的調用需要使用CALL語句。

如上圖所示,建立函數包含以下 6 個步驟:
本文檔以在 ODC 中建立員工函數(function_emp)為例,函數 function_emp 中包含 id INT 類型的參數,根據 id 擷取員工姓名。
文中所使用的均為樣本資料,您可根據實際情況對資料進行替換。
操作步驟
步驟一:輸入函數名稱
在 OceanBase 開發人員中心(OceanBase Developer Center,ODC)單擊串連名進入串連後,在左導覽列中單擊 函數 標籤可以查看函數列表。在函數列表的右上方,單擊 + 建立函數,或是在 ODC 上方導覽列中單擊 建立 以建立所需對象。

步驟二:選擇函數傳回值的資料類型
具體資料類型,請參考 OceanBase 資料庫的參考指南。
步驟三:添加參數
參數即調用函數時傳入的資訊,需指定參數資訊:
Oracle 模式:需指定參數的 名稱、模式、類型和 預設值。
MySQL 模式: 需指定參數的 名稱、類型和 長度。
添加函數提供三種功能操作:
功能項
說明
彈窗引導輔助菜單
通過彈窗引導輔助菜單,可添加、刪除、上下移動參數。
單擊表序號
單擊表序號,選中整行,顯示輔助菜單(刪除、上/下移動)。
單擊並選中表序號,可拖動整行參數以調整順序。
右鍵操作
拖動滑鼠選中整行,按右鍵滑鼠,進行複製行 / 向下移動一行。
選擇儲存格,按右鍵滑鼠,進行複製。
參數中需指定的 模式指參數類型。
MySQL 模式下不支援設定參數模式,Oracle 模式下支援三種參數模式 IN(輸入)、OUT(輸出)、INOUT(輸入輸出):
參數
類型
IN
輸入參數,調用函數時將參數的值傳入函數供執行函數時使用。
OUT
輸出參數,調用函數時,函數會忽略輸出參數本身的值並傳入一個空值,在函數體中可以修改輸出參數並將修改結果返回給輸出參數所代表的實參。
INOUT
輸入輸出參數,即同時具備輸入參數和輸出參數的功能。
說明Oracle 模式下函數和預存程序均包含 IN/OUT/INOUT 參數;MySQL 模式下只包含 IN 參數,而預存程序包含 IN/OUT/INOUT 參數。
步驟四:確認建立函數
單擊 確定,進入 SQL 建立確認頁面。
步驟五:編輯函數語句

在 SQL 建立確認頁面 ,編輯函數語句。
同時,在編輯頁面的工具列中提供了以下功能鍵:
功能 | 說明 |
格式化 | 單擊該按鈕對選中的 SQL 語句或當前 SQL 視窗中的所有 SQL 語句進行統一的格式化(縮排、換行和高亮關鍵字等操作)。 |
尋找/替換 | 在尋找框內輸入內容以對指令碼進行檢索,尋找後可在替換框內輸入內容以對尋找內容進行替換。 |
撤銷 | 將指令碼回退到上一步操作執行的結果。 |
重做 | 執行 撤銷操作後,對指令碼重新執行撤銷前的操作。 |
大小寫 | 提供全部大寫、全部小寫和 首字母大寫三種效果,為指令碼中選中的語句轉換為對應形式。 |
縮排 | 提供 添加縮排和 刪除縮排兩種效果,為指令碼中選中的語句添加或刪除包含的縮排。 |
注釋 | 提供 添加註釋和 刪除注釋兩種效果,將指令碼中選中的語句轉換為注釋或轉換為 SQL 語句。 |
IN 值轉化 | 可以將如 A B 的格式轉化為 ('A','B') 的格式。 |
使用者可以在 SQL 建立確認頁面編輯建立的函數語句。文法格式如下:
CREATE FUNCTION < 函數名 > ([ <參數1> <類型1> [ , <參數2> <類型2>] ] …)
RETURNS < 類型 >
< 函數主體 >參數說明:
參數 | 說明 |
<函數名> | 指定自訂函數的名稱。 重要 自訂函數不能與預存程序具有相同的名稱。 |
<參數><類型> | 用於指定自訂函數的參數。 該參數只有名稱和類型,不能指定關鍵字 IN、OUT 和 INOUT。 |
RETURNS<類型> | 用於聲明自訂函數傳回值的資料類型。其中, 重要 在 RETURN VALUE 語句中包含 SELECT 語句時,SELECT 語句的返回結果只能是一行且只能有一列值。 |
<函數主體> | 自訂函數的主體部分,亦稱函數體。 函數體必須包含一個 |
樣本:
CREATE FUNCTION `function_emp` ( `id` int(45)) RETURNS VARCHAR(300)
-- 函數體開始
BEGIN
-- 申明變數
DECLARE
a VARCHAR(300);
-- 變數賦值
SELECT
name INTO a
FROM
employee
WHERE
emp_no = id;
-- 傳回值
RETURN a;
-- 函數體結束
END步驟六:完成建立函數
單擊 建立,完成建立函數後,可以如同調用系統內建函數一樣,使用關鍵字 SELECT調用使用者自訂的函數。
文法格式:
SELECT <函數名> ([<參數> [,...]])樣本:
SELECT function_emp(2);MySQL 模式

Oracle 模式
重要Oracle 模式下如果包含 OUT 參數,則需通過
CALL方式調用。函數列表中如果出現黃色
表徵圖,表示目前有錯誤或者警告。