PL/SQL - 字串:初學者指南

大家好,未來的 PL/SQL 巫師們!今天,我們將踏上一段令人興奮的旅程,進入 PL/SQL 的字串世界。別擔心如果你從未寫過一行代碼——我將成為你親切導遊,我們會一步步來。在本教程結束時,你將像專業人士一樣操作字串!

PL/SQL - Strings

什麼是字串?

在我們深入之前,讓我們從基礎開始。在編程中,字串簡單地就是字符的序列。它可能是一個單詞、一句話,甚至是整個段落。把它當作你可能在鍵盤上輸入的任何文本。

宣告字串變數

在 PL/SQL 中,我們需要在使用變數之前宣告它們。這就像在開始對話之前介紹自己一樣——這只是個好習慣!

基本字串宣告

讓我們從最簡單的方式開始宣告字串變數:

DECLARE
my_name VARCHAR2(50) := 'John Doe';
BEGIN
DBMS_OUTPUT.PUT_LINE('我的名字是: ' || my_name);
END;

在這個例子中:

  • 我們使用 DECLARE 關鍵字來開始我們的變數宣告。
  • my_name 是我們變數的名稱。
  • VARCHAR2(50) 意味著它是一個可變長度的字串,最多可以容納 50 個字符。
  • := 是賦值運算符,就像等於號。
  • 'John Doe' 是我們賦給 my_name 的初始值。

當我們運行這段代碼時,它將輸出:"我的名字是: John Doe"

使用不同的字串類型

PL/SQL 提供了多種字串類型。讓我們看看一些:

DECLARE
v_varchar2 VARCHAR2(20) := 'Hello, World!';
v_char CHAR(10) := 'Fixed     ';
v_long LONG := '這是一個很長的字串,可以存儲達 32,760 個字符';
BEGIN
DBMS_OUTPUT.PUT_LINE('VARCHAR2: ' || v_varchar2);
DBMS_OUTPUT.PUT_LINE('CHAR: ' || v_char);
DBMS_OUTPUT.PUT_LINE('LONG: ' || v_long);
END;

這裡發生了什麼:

  • VARCHAR2 是最常見的類型,存儲可變長度的字串。
  • CHAR 是為固定長度的字串設計的。注意它是如何用空格填充額外空間的。
  • LONG 可以存儲非常長的字串,但在某些操作中靈活性較小。

PL/SQL 字串函數和運算符

既然我們已經知道如何宣告字串,那麼讓我們來點樂趣吧!

串接

串接只是一個花哨的詞,意思是"將字串連接起來"。在 PL/SQL 中,我們使用 || 運算符:

DECLARE
first_name VARCHAR2(20) := 'Jane';
last_name VARCHAR2(20) := 'Smith';
full_name VARCHAR2(41);
BEGIN
full_name := first_name || ' ' || last_name;
DBMS_OUTPUT.PUT_LINE('全名: ' || full_name);
END;

這將輸出:"全名: Jane Smith"

字串函數

PL/SQL 提供了大量的內置函數來操作字串。讓我們探索一些最有用的:

函數 描述 範例
UPPER 將字串轉換為大寫 UPPER('hello') 返回 'HELLO'
LOWER 將字串轉換為小寫 LOWER('WORLD') 返回 'world'
INITCAP 將每個單詞的首字母大寫 INITCAP('john doe') 返回 'John Doe'
LENGTH 返回字串的長度 LENGTH('OpenAI') 返回 6
SUBSTR 提取字串的一部分 SUBSTR('HelloWorld', 1, 5) 返回 'Hello'
TRIM 從開始/結尾移除指定的字符 TRIM(' Hello ') 返回 'Hello'
REPLACE 替換所有出現的子字串 REPLACE('JACK and JILL','J','BL') 返回 'BLACK and BLILL'

讓我們看看這些函數是如何工作的:

DECLARE
v_string VARCHAR2(50) := '  hello, world!  ';
BEGIN
DBMS_OUTPUT.PUT_LINE('原始: ' || v_string);
DBMS_OUTPUT.PUT_LINE('UPPER: ' || UPPER(v_string));
DBMS_OUTPUT.PUT_LINE('LOWER: ' || LOWER(v_string));
DBMS_OUTPUT.PUT_LINE('INITCAP: ' || INITCAP(v_string));
DBMS_OUTPUT.PUT_LINE('LENGTH: ' || LENGTH(v_string));
DBMS_OUTPUT.PUT_LINE('SUBSTR: ' || SUBSTR(v_string, 3, 5));
DBMS_OUTPUT.PUT_LINE('TRIM: ' || TRIM(v_string));
DBMS_OUTPUT.PUT_LINE('REPLACE: ' || REPLACE(v_string, 'o', '0'));
END;

這段代碼將輸出:

原始:   hello, world!
UPPER:   HELLO, WORLD!
LOWER:   hello, world!
INITCAP:   Hello, World!
LENGTH: 16
SUBSTR: hello
TRIM: hello, world!
REPLACE:   hell0, w0rld!

組合所有知識

現在,讓我們把我們學到的知識結合到一個更複雜的例子中:

DECLARE
v_sentence VARCHAR2(100) := 'The quick brown fox jumps over the lazy dog';
v_word VARCHAR2(20);
v_count NUMBER;
BEGIN
-- 計算單詞數量
v_count := LENGTH(v_sentence) - LENGTH(REPLACE(v_sentence, ' ', '')) + 1;
DBMS_OUTPUT.PUT_LINE('單詞數量: ' || v_count);

-- 提取並首字母大寫第 4 個單詞
v_word := INITCAP(SUBSTR(v_sentence,
INSTR(v_sentence, ' ', 1, 3) + 1,
INSTR(v_sentence, ' ', 1, 4) - INSTR(v_sentence, ' ', 1, 3) - 1));
DBMS_OUTPUT.PUT_LINE('第 4 個單詞是: ' || v_word);

-- 將 'fox' 替換為 'cat',將 'dog' 替換為 'mouse'
v_sentence := REPLACE(REPLACE(v_sentence, 'fox', 'cat'), 'dog', 'mouse');
DBMS_OUTPUT.PUT_LINE('修改後的句子: ' || v_sentence);
END;

這個例子演示了:

  1. 通過計算空格來計算單詞數量
  2. 使用 SUBSTRINSTR 提取特定單詞
  3. 在句子中替換多個單詞

輸出:

單詞數量: 9
第 4 個單詞是: Fox
修改後的句子: The quick brown cat jumps over the lazy mouse

這就是全部!你剛剛踏入了 PL/SQL 字串的奇妙世界。記住,熟練是由練習得來的,所以不要害怕嘗試這些函數,並創造你自己的字串操作冒險。

在你意識到之前,你將會串接複雜的查詢,並用你的 PL/SQL 技能讓你的朋友印象深刻。持續編程,並享受字串操作的樂趣!

Credits: Image by storyset