PL/SQL - 儀式:初學者指南
你好,未來的 PL/SQL 巫師們!今天,我們將踏上一段令人興奮的旅程,進入 PL/SQL 儀式的世界。別擔心你對編程是新手——我將成為你的友好導遊,我們將一步步前進。在這個教學結束時,你將能夠像專業人士一樣創建自己的儀式!
PL/SQL 儀式是什麼?
在我們深入之前,讓我們先了解儀式是什麼。把儀式想像成烹飪中的可重用配方。就像你可能有一個你反覆使用的最愛巧克力碎片曲奇配方一樣,儀式是一組你可以隨時調用來執行特定任務的 SQL 和 PL/SQL 語句。
PL/SQL 子程序的部分
現在,讓我們分解 PL/SQL 子程序(包括儀式)的結構。這就像理解三明治的不同部分——每個組件都有它的角色!
- 聲明部分:這裡我們介紹我們的原料(變量、常量等)。
- 可執行部分:這裡發生魔法——我們的實際代碼放在這裡。
- 異常處理部分:這是我們的安全網,捕捉可能發生的任何錯誤。
這裡有一個簡單的視覺表示:
DECLARE
-- 聲明部分
BEGIN
-- 可執行部分
EXCEPTION
-- 異常處理部分
END;
創建儀式
讓我們捋起袖子創建我們的第一個儀式!我們從簡單的開始——一個說 "Hello, World!" 的儀式。
CREATE OR REPLACE PROCEDURE say_hello IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, World!');
END;
/
讓我們分解這個:
-
CREATE OR REPLACE PROCEDURE
:這告訴 Oracle 創建一個新的儀式或替換同名的現有儀式。 -
say_hello
:這是我們給儀式的名字。 -
IS
:這個關鍵字將儀式頭與其體分隔開。 -
BEGIN
和END
:這些關鍵字包絡著可執行部分。 -
DBMS_OUTPUT.PUT_LINE
:這是一個內置的儀式,用於打印文本。 -
/
:這個斜杠執行整個CREATE PROCEDURE
語句。
執行獨立儀式
太棒了!我們已經創建了我們的儀式,但我們如何運行它呢?這簡直就像派一樣容易:
BEGIN
say_hello;
END;
/
當你運行這個時,你應該會看到 "Hello, World!" 被打印出來。恭喜!你已經創建並執行了你的第一個 PL/SQL 儀式!
刪除獨立儀式
有時候,我們需要清理。如果你想要刪除一個儀式,這很直接:
DROP PROCEDURE say_hello;
這個命令將刪除我們的 say_hello
儀式。謹慎使用這個權力——能力越大,責任越大!
PL/SQL 子程序中的參數模式
現在,讓我們通過添加參數來使我們的儀式更具靈活性。在 PL/SQL 中,參數可以有不同模式:
模式 | 描述 |
---|---|
IN | 將值傳遞給儀式 |
OUT | 從儀式返回值 |
IN OUT | 傳遞值進來並從儀式返回值 |
讓我們創建一個帶有 IN 參數的儀式:
CREATE OR REPLACE PROCEDURE greet_user(p_name IN VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, ' || p_name || '!');
END;
/
現在,我們可以向不同的用戶問候:
BEGIN
greet_user('Alice');
greet_user('Bob');
END;
/
這將輸出:
Hello, Alice!
Hello, Bob!
過傳參數的方法
當調用帶有參數的儀式時,我們有兩種主要方法:
- 位置表示法:我們按定義的順序傳遞參數。
- 命名表示法:我們指定每個值對應哪個參數。
讓我們看看兩種方法在新的儀式中是如何工作的:
CREATE OR REPLACE PROCEDURE calculate_rectangle(
p_length IN NUMBER,
p_width IN NUMBER,
p_area OUT NUMBER,
p_perimeter OUT NUMBER
) IS
BEGIN
p_area := p_length * p_width;
p_perimeter := 2 * (p_length + p_width);
END;
/
現在,讓我們使用兩種表示法調用這個儀式:
DECLARE
v_area NUMBER;
v_perimeter NUMBER;
BEGIN
-- 位置表示法
calculate_rectangle(5, 3, v_area, v_perimeter);
DBMS_OUTPUT.PUT_LINE('位置:面積 = ' || v_area || ', 邊長 = ' || v_perimeter);
-- 命名表示法
calculate_rectangle(p_width => 3, p_length => 5, p_perimeter => v_perimeter, p_area => v_area);
DBMS_OUTPUT.PUT_LINE('命名:面積 = ' || v_area || ', 邊長 = ' || v_perimeter);
END;
/
兩種調用都會產生相同的結果:
位置:面積 = 15, 邊長 = 16
命名:面積 = 15, 邊長 = 16
命名表示法在參數很多或你想跳過可選參數時特別有用。
就是这样,各位!我們已經覆蓋了 PL/SQL 儀式的基本知識,從創建到執行,甚至還觸及了參數以及如何傳遞它們。記住,熟能生巧,所以不要害怕嘗試你自己的儀式。
在我們結束之前,這裡有一個快速笑話:為什麼數據庫管理員離開了他的妻子?她有太多的視圖且沒有規範化!
快樂編程,願你的儀式總是成功執行!
Credits: Image by storyset