PL/SQL - 基本語法
歡迎,未來的程序员!今天,我們將深入PL/SQL的精彩世界。如果你以前從未寫過一行代碼,也不用擔心 - 我們將從頭開始,逐步建立你的知識。在本教程結束時,你將能夠自信地編寫你的第一個PL/SQL程序!
「Hello World」範例
讓我們從傳統的「Hello World」程序開始。這是每個程序員的必經之路,也是我們讓雙腳濕潑PL/SQL語法的絕佳方式。
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, World!');
END;
/
讓我們來解析這段代碼:
-
BEGIN
:這個關鍵字標誌著我們PL/SQL區块的開始。 -
DBMS_OUTPUT.PUT_LINE('Hello, World!');
:這行代碼打印我們的消息。把它看作是PL/SQL與我們交談的方式。 -
END;
:這標誌著我們PL/SQL區块的結尾。 -
/
:這個前向斜杠告訴SQL*Plus執行PL/SQL區块。
當你運行這段代碼時,你會在螢幕上看到「Hello, World!」。恭喜!你剛剛寫出了你的第一個PL/SQL程序。
PL/SQL標識符
標識符是我們給程序元素(如變量、過程、函數)命名的。它們就像我們代碼不同部分的名牌。以下是如何創建標識符的規則:
- 必須以字母開頭(A-Z或a-z)
- 可以跟隨字母、數字(0-9)、美元符號($)、下劃線(_)或鋪號(#)
- 不能超過30個字符
- 不能是保留字(如BEGIN、END、IF等)
讓我們看一些例子:
DECLARE
employee_name VARCHAR2(50);
salary NUMBER;
dept_id NUMBER(5);
BEGIN
-- 代碼寫在這裡
END;
/
在這個例子中,employee_name
、salary
和dept_id
都是有效的標識符。
PL/SQL分隔符
分隔符是在PL/SQL中具有特定含義的特殊字符或符號。它們就像句子中的標點符號,幫助我們結構化和分隔代碼的不同部分。
以下是一些常見的PL/SQL分隔符:
分隔符 | 描述 |
---|---|
; | 說明終止符 |
% | 屬性指示符 |
. | 成分選擇器 |
( ) | 包含參數列表 |
, | 參數分隔符 |
:= | 賦值運算符 |
=> | 關聯運算符 |
-- | 單行評論指示符 |
/ / | 多行評論指示符 |
讓我們看看一些實際應用的例子:
DECLARE
v_count NUMBER := 0; -- 賦值運算符
v_name VARCHAR2(50) := 'John Doe';
BEGIN
v_count := v_count + 1; -- 說明終止符
DBMS_OUTPUT.PUT_LINE('Name: ' || v_name); -- 成分選擇器
END;
/
PL/SQL評論
評論就像代碼中的便利貼紙。它們被編譯器忽略,但對於解釋你的代碼是什麼非常有用。在PL/SQL中有兩種類型的評論:
- 單行評論:以
--
開頭 - 多行評論:包含在
/*
和*/
之間
以下是一個例子:
DECLARE
-- 這是一個單行評論
v_pi NUMBER := 3.14159;
BEGIN
/*
這是一個多行評論。
它可以跨越多行。
非常有用於長篇解釋。
*/
DBMS_OUTPUT.PUT_LINE('pi的值是: ' || v_pi);
END;
/
PL/SQL程序單元
PL/SQL程序單元是PL/SQL應用的建築塊。它們就像烹飪書中的食譜 - 每個都描述了如何執行一個特定的任務。主要類型有:
- 匿名區块
- 過程
- 函數
- 套件
讓我們看看每個的例子:
1. 匿名區块
我們已經在「Hello World」範例中見過這個。它是一段未保存到數據庫中的代碼。
BEGIN
DBMS_OUTPUT.PUT_LINE('這是一個匿名區块');
END;
/
2. 過程
過程是一個命名的PL/SQL區块,它執行一個特定的動作。
CREATE OR REPLACE PROCEDURE greet_user(p_name IN VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, ' || p_name || '!');
END;
/
-- 調用過程:
BEGIN
greet_user('Alice');
END;
/
3. 函數
函數與過程相似,但它返回一個值。
CREATE OR REPLACE FUNCTION calculate_area(p_radius IN NUMBER)
RETURN NUMBER IS
v_pi CONSTANT NUMBER := 3.14159;
BEGIN
RETURN v_pi * p_radius * p_radius;
END;
/
-- 使用函數:
DECLARE
v_area NUMBER;
BEGIN
v_area := calculate_area(5);
DBMS_OUTPUT.PUT_LINE('面積是: ' || v_area);
END;
/
4. 套件
套件是一組相關的過程、函數、變量和其他PL/SQL對象的集合。
CREATE OR REPLACE PACKAGE math_operations AS
FUNCTION add_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER;
FUNCTION subtract_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER;
END math_operations;
/
CREATE OR REPLACE PACKAGE BODY math_operations AS
FUNCTION add_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN a + b;
END add_numbers;
FUNCTION subtract_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN a - b;
END subtract_numbers;
END math_operations;
/
-- 使用套件:
DECLARE
v_result NUMBER;
BEGIN
v_result := math_operations.add_numbers(10, 5);
DBMS_OUTPUT.PUT_LINE('10 + 5 = ' || v_result);
v_result := math_operations.subtract_numbers(10, 5);
DBMS_OUTPUT.PUT_LINE('10 - 5 = ' || v_result);
END;
/
這就是全部!我們已經介紹了PL/SQL的基本語法,從簡單的「Hello World」程序到更複雜的結構,如套件。記住,學習編程就像學習一門新語言 - 它需要練習和耐心。不要害怕嘗試代碼範例,修改它們,並觀察結果。這樣,你才能真正內化這些概念,並成為一個熟的PL/SQL程序员。
開心編程,願你的查詢總是返回你期望的結果!
Credits: Image by storyset