PL/SQL - 變量:初學者指南

您好,未來的 PL/SQL 巫師們!今天,我們將踏上一段令人興奮的旅程,進入 PL/SQL 變量的世界。別擔心如果您是編程新手——我將成為您友好的指導者,我們將一步步前進。在本教程結束時,您將像專家一樣玩轉變量!

PL/SQL - Variables

變量是什麼?

在我們深入之前,讓我們先了解變量是什麼。將變量想像成您計算機記憶中的一些小容器,它們用來存儲數據。就像您可能會在房間中使用不同的盒子來存儲不同類型的物品一樣,我們使用變量在我們的程序中存儲不同類型的數據。

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