PL/SQL - 字串:初學者指南
大家好,未來的 PL/SQL 巫師們!今天,我們將踏上一段令人興奮的旅程,進入 PL/SQL 的字串世界。別擔心如果你從未寫過一行代碼——我將成為你親切導遊,我們會一步步來。在本教程結束時,你將像專業人士一樣操作字串!
什麼是字串?
在我們深入之前,讓我們從基礎開始。在編程中,字串簡單地就是字符的序列。它可能是一個單詞、一句話,甚至是整個段落。把它當作你可能在鍵盤上輸入的任何文本。
宣告字串變數
在 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;
這個例子演示了:
- 通過計算空格來計算單詞數量
- 使用
SUBSTR
和INSTR
提取特定單詞 - 在句子中替換多個單詞
輸出:
單詞數量: 9
第 4 個單詞是: Fox
修改後的句子: The quick brown cat jumps over the lazy mouse
這就是全部!你剛剛踏入了 PL/SQL 字串的奇妙世界。記住,熟練是由練習得來的,所以不要害怕嘗試這些函數,並創造你自己的字串操作冒險。
在你意識到之前,你將會串接複雜的查詢,並用你的 PL/SQL 技能讓你的朋友印象深刻。持續編程,並享受字串操作的樂趣!
Credits: Image by storyset