PL/SQL - 變量:初學者指南
您好,未來的 PL/SQL 巫師們!今天,我們將踏上一段令人興奮的旅程,進入 PL/SQL 變量的世界。別擔心如果您是編程新手——我將成為您友好的指導者,我們將一步步前進。在本教程結束時,您將像專家一樣玩轉變量!
變量是什麼?
在我們深入之前,讓我們先了解變量是什麼。將變量想像成您計算機記憶中的一些小容器,它們用來存儲數據。就像您可能會在房間中使用不同的盒子來存儲不同類型的物品一樣,我們使用變量在我們的程序中存儲不同類型的數據。
PL/SQL 中的變量聲明
在 PL/SQL 中,聲明一個變量就像向您的新朋友介紹自己一樣。您告訴程序:“嘿,我在这裡,這是我能夠持有的東西!”
基本語法
PL/SQL 中聲明變量的基本語法是:
變量名稱 資料類型;
讓我們分解一下:
-
變量名稱
是您為變量選擇的名稱 -
資料類型
是變量能夠持有的數據類型
示例
DECLARE
my_name VARCHAR2(50);
my_age NUMBER;
is_student BOOLEAN;
BEGIN
-- 您的代碼在這裡
END;
在這個示例中:
-
my_name
可以持有最多 50 個字符 -
my_age
可以持有數字 -
is_student
可以是 TRUE 或 FALSE
記住,在 PL/SQL 中,我們在 DECLARE 段中聲明變量,位於 BEGIN 語句之前。
常見數據類型
以下是一些您將遇到的常見數據類型:
數據類型 | 描述 | 示例 |
---|---|---|
VARCHAR2 | 可變長度的字符字符串 | 'Hello, World!' |
NUMBER | 數值 | 42, 3.14 |
DATE | 日期和時間值 | '01-JAN-2023' |
BOOLEAN | 邏輯值 (TRUE/FALSE) | TRUE |
PL/SQL 中初始化變量
現在我們已經聲明了我們的變量,讓我們給它們一些值!這個過程稱為初始化。
基本初始化
您可以在聲明變量時直接初始化它:
DECLARE
greeting VARCHAR2(20) := 'Hello, PL/SQL!';
lucky_number NUMBER := 7;
BEGIN
DBMS_OUTPUT.PUT_LINE(greeting);
DBMS_OUTPUT.PUT_LINE('我的幸運數字是: ' || lucky_number);
END;
在這個示例中,我們向 PL/SQL 打招呼並分享我們的幸運數字。:=
是 PL/SQL 中的賦值運算符。
使用 NULL 初始化
有時候,您可能想要聲明一個變量但還不給它賦值。在這種情況下,您可以使用 NULL:
DECLARE
user_input VARCHAR2(100) := NULL;
BEGIN
-- 我們稍後將獲取用戶輸入
END;
PL/SQL 中的變量作用域
變量作用域就像變量的鄰居一樣——它定義了變量可以被看到和使用的地方。
局部變量
在塊中聲明的變量對該塊是局部的。它們在其塊外部無法被看到。
DECLARE
outer_variable VARCHAR2(20) := '我在外面!';
BEGIN
DBMS_OUTPUT.PUT_LINE(outer_variable);
DECLARE
inner_variable VARCHAR2(20) := '我在里面!';
BEGIN
DBMS_OUTPUT.PUT_LINE(outer_variable); -- 這個可以工作
DBMS_OUTPUT.PUT_LINE(inner_variable); -- 這個也可以工作
END;
DBMS_OUTPUT.PUT_LINE(outer_variable); -- 這個可以工作
-- DBMS_OUTPUT.PUT_LINE(inner_variable); -- 這會導致錯誤
END;
在這個示例中,inner_variable
像一個害羞的朋友,只在內部塊派對中出現。外部塊看不到它!
全局變量
如果您希望變量在程序中的任何地方都可见,您可以在最外部的塊中聲明它。
DECLARE
global_var NUMBER := 100;
PROCEDURE print_global IS
BEGIN
DBMS_OUTPUT.PUT_LINE('全局變量值: ' || global_var);
END;
BEGIN
print_global;
global_var := global_var + 50;
print_global;
END;
在這裡,global_var
像一個受歡迎的孩子——每個人都是認識他並與之互動!
將 SQL 查詢結果賦值給 PL/SQL 變量
PL/SQL 最酷的事情之一就是它與 SQL 的無縫集成。您可以使用 SQL 查詢將值賦值給您的 PL/SQL 變量!
单行查询
DECLARE
employee_name VARCHAR2(100);
employee_salary NUMBER;
BEGIN
SELECT first_name || ' ' || last_name, salary
INTO employee_name, employee_salary
FROM employees
WHERE employee_id = 100;
DBMS_OUTPUT.PUT_LINE('員工: ' || employee_name);
DBMS_OUTPUT.PUT_LINE('薪水: $' || employee_salary);
END;
在這個示例中,我們從 employees
表中提取一名員工的名字和薪水,並將它們存儲在我們的 PL/SQL 變量中。
多行查询
對於多行,我們需要使用游標或批量收集。以下是一個使用批量收集的示例:
DECLARE
TYPE name_table_type IS TABLE OF VARCHAR2(100);
employee_names name_table_type;
BEGIN
SELECT first_name || ' ' || last_name
BULK COLLECT INTO employee_names
FROM employees
WHERE department_id = 60;
FOR i IN 1..employee_names.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('員工 ' || i || ': ' || employee_names(i));
END LOOP;
END;
這個腚本從部門 60 中提取所有員工的名字,並將它們存儲在一個 PL/SQL 表中。然後我們遍歷這個表以打印每個名字。
至此,我們已經涵蓋了 PL/SQL 變量的基礎,從聲明到初始化,作用域,甚至如何使用 SQL 查詢結果填充它們。記住,熟能生巧,所以不要害怕嘗試這些概念。
在我離開之前,這裡有一個編程笑話給您:為什麼編程員會辞职?因為他沒有得到數組(加薪)!?
快樂編程,願您的變量總是表現良好!
Credits: Image by storyset