PL/SQL - 儀式:初學者指南

你好,未來的 PL/SQL 巫師們!今天,我們將踏上一段令人興奮的旅程,進入 PL/SQL 儀式的世界。別擔心你對編程是新手——我將成為你的友好導遊,我們將一步步前進。在這個教學結束時,你將能夠像專業人士一樣創建自己的儀式!

PL/SQL - Procedures

PL/SQL 儀式是什麼?

在我們深入之前,讓我們先了解儀式是什麼。把儀式想像成烹飪中的可重用配方。就像你可能有一個你反覆使用的最愛巧克力碎片曲奇配方一樣,儀式是一組你可以隨時調用來執行特定任務的 SQL 和 PL/SQL 語句。

PL/SQL 子程序的部分

現在,讓我們分解 PL/SQL 子程序(包括儀式)的結構。這就像理解三明治的不同部分——每個組件都有它的角色!

  1. 聲明部分:這裡我們介紹我們的原料(變量、常量等)。
  2. 可執行部分:這裡發生魔法——我們的實際代碼放在這裡。
  3. 異常處理部分:這是我們的安全網,捕捉可能發生的任何錯誤。

這裡有一個簡單的視覺表示:

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:這個關鍵字將儀式頭與其體分隔開。
  • BEGINEND:這些關鍵字包絡著可執行部分。
  • 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!

過傳參數的方法

當調用帶有參數的儀式時,我們有兩種主要方法:

  1. 位置表示法:我們按定義的順序傳遞參數。
  2. 命名表示法:我們指定每個值對應哪個參數。

讓我們看看兩種方法在新的儀式中是如何工作的:

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