背景資訊
PL 是一種過程化程式語言(Procedural Language,PL)。是對 SQL 的擴充,在普通 SQL 陳述式的基礎上增加了程式設計語言的特點,將資料操作和查詢語句組織在 PL 代碼的過程化代碼中,通過邏輯判斷、迴圈等操作實現複雜的功能。
使用 PL 可以編寫具有進階功能的程式,能夠將商務邏輯封裝在資料庫內部,提供更好的抽象性和安全性,同時減少了網路的互動,調用速度更快,從而提升整體效能。
PL 程式的開發工作是資料庫服務開發人員重要的日常工作,與 SQL 陳述式的支援模組類似,PL 的調試模組同樣為非常重要的功能。因此,在編程過程中,開發人員需要一個PL 開發地區和調試功能。
PL 語句可用於編寫函數、預存程序、程式包和觸發器等資料庫物件。
ODC V2.2.0 及之後版本支援 PL 對象和匿名塊的建立、編譯、運行和調試等功能。使用者可在匿名塊視窗的編輯地區中編譯 PL 語句,同時可對已建立的 PL 對象進行編輯和調試等操作。建議使用 ODC 最新版本以獲得更好的體驗。
本文檔以建立 OceanBase Oracle 類型的預存程序為例,在資料庫 GSH 中建立預存程序 PROC_VARCHAR2。
文中所使用的均為樣本資料,您可根據實際情況對資料進行替換。
前提條件
ODC PL 支援現狀
功能 | 支援的對象 | 支援的資料來源 | 支援版本 |
編譯 | 函數/預存程序/程式包 | OceanBase Oracle、OB Cloud Oracle | V2.2.7x、V3.0.0 及之後版本。 |
調試 | 函數/預存程序/匿名塊 | OceanBase Oracle | V3.2.3 及之後版本。 |
運行 | 函數/預存程序 | OceanBase Oracle、OB Cloud Oracle、OceanBase MySQL、OB Cloud、MySQL | V2.0.x 及之後版本。 |
函數/預存程序 | MySQL | V5.7 | |
運行 | 程式包/匿名塊 | OceanBase Oracle、OB Cloud Oracle | V2.0.x 及之後版本。 |
同時需要注意:
若資料來源為 OceanBase,有且僅能通過 OBProxy 串連,該執行個體將不支援調試。
匿名塊視窗僅在 OceanBase Oracle/OB Cloud Oracle 資料來源提供。
ODC V3.2.3 之前版本不支援在 arm 架構下進行調試。
PL 編譯
在 SQL 視窗中建立預存程序。

CREATE OR REPLACE PROCEDURE PROC_VARCHAR2(p1 in VARCHAR2, p2 out VARCHAR2, p3 in out VARCHAR2) as v1 varchar2(64) := 'hello,oceanbase'; begin dbms_output.put_line(p1); dbms_output.put_line(p3); p2 := 'hello,odc'; end;在 SQL 開發視窗的左側導覽列 > 預存程序列表中,選擇 編譯 預存程序 PROC_VARCHAR2。

編譯 PL 語句並查看編譯結果。

PL 調試
在 SQL 開發視窗的左側導覽列 > 預存程序列表中,選擇調試預存程序 PROC_VARCHAR2,進入偵錯模式。

設定參數值後,單擊 確定。
重要OceanBase V4.0.0 及之後的版本,調試前需要擷取調試許可權。樣本:
GRANT DEBUG CONNECT SESSION TO GSH; GRANT DEBUG ANY PROCEDURE TO GSH;
進入調試頁面,單擊批量執行,運行 PL 語句。
