PL 編譯和調(diào)試
背景信息
PL 是一種過程化程序語言(Procedural Language,PL)。是對 SQL 的擴展,在普通 SQL 語句的基礎上增加了編程語言的特點,將數(shù)據(jù)操作和查詢語句組織在 PL 代碼的過程化代碼中,通過邏輯判斷、循環(huán)等操作實現(xiàn)復雜的功能。
使用 PL 可以編寫具有高級功能的程序,能夠?qū)I(yè)務邏輯封裝在數(shù)據(jù)庫內(nèi)部,提供更好的抽象性和安全性,同時減少了網(wǎng)絡的交互,調(diào)用速度更快,從而提升整體性能。
PL 程序的開發(fā)工作是數(shù)據(jù)庫服務開發(fā)人員重要的日常工作,與 SQL 語句的支持模塊類似,PL 的調(diào)試模塊同樣為非常重要的功能。因此,在編程過程中,開發(fā)人員需要一個PL 開發(fā)區(qū)域和調(diào)試功能。
PL 語句可用于編寫函數(shù)、存儲過程、程序包和觸發(fā)器等數(shù)據(jù)庫對象。
ODC V2.2.0 及之后版本支持 PL 對象和匿名塊的創(chuàng)建、編譯、運行和調(diào)試等功能。用戶可在匿名塊窗口的編輯區(qū)域中編譯 PL 語句,同時可對已創(chuàng)建的 PL 對象進行編輯和調(diào)試等操作。建議使用 ODC 最新版本以獲得更好的體驗。
本文檔以創(chuàng)建 OceanBase Oracle 類型的存儲過程為例,在數(shù)據(jù)庫 GSH 中創(chuàng)建存儲過程 PROC_VARCHAR2。
文中所使用的均為示例數(shù)據(jù),您可根據(jù)實際情況對數(shù)據(jù)進行替換。
前提條件
ODC PL 支持現(xiàn)狀
功能 | 支持的對象 | 支持的數(shù)據(jù)源 | 支持版本 |
編譯 | 函數(shù)/存儲過程/程序包 | OceanBase Oracle、OB Cloud Oracle | V2.2.7x、V3.0.0 及之后版本。 |
調(diào)試 | 函數(shù)/存儲過程/匿名塊 | OceanBase Oracle | V3.2.3 及之后版本。 |
運行 | 函數(shù)/存儲過程 | OceanBase Oracle、OB Cloud Oracle、OceanBase MySQL、OB Cloud、MySQL | V2.0.x 及之后版本。 |
函數(shù)/存儲過程 | MySQL | V5.7 | |
運行 | 程序包/匿名塊 | OceanBase Oracle、OB Cloud Oracle | V2.0.x 及之后版本。 |
同時需要注意:
若數(shù)據(jù)源為 OceanBase,有且僅能通過 OBProxy 連接,該實例將不支持調(diào)試。
匿名塊窗口僅在 OceanBase Oracle/OB Cloud Oracle 數(shù)據(jù)源提供。
ODC V3.2.3 之前版本不支持在 arm 架構(gòu)下進行調(diào)試。
PL 編譯
在 SQL 窗口中創(chuàng)建存儲過程。
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 開發(fā)窗口的左側(cè)導航欄 > 存儲過程列表中,選擇 編譯 存儲過程 PROC_VARCHAR2。
編譯 PL 語句并查看編譯結(jié)果。
PL 調(diào)試
在 SQL 開發(fā)窗口的左側(cè)導航欄 > 存儲過程列表中,選擇調(diào)試存儲過程 PROC_VARCHAR2,進入調(diào)試模式。
設置參數(shù)值后,單擊 確定。
重要OceanBase V4.0.0 及之后的版本,調(diào)試前需要獲取調(diào)試權(quán)限。示例:
GRANT DEBUG CONNECT SESSION TO GSH; GRANT DEBUG ANY PROCEDURE TO GSH;
進入調(diào)試頁面,單擊批量執(zhí)行,運行 PL 語句。