2020-12-18
Oracle PL/SQL 第三章--運算子與表示式
目錄
1、運算子分類
運算子是一個符號,它告訴編譯器執行指定的數學或者邏輯操作。在PL/SQL中也有豐富的幾種內建運算子,有如下幾個型別:
-
算術運算子
-
關係運算子
-
比較運算子
-
邏輯運算子
1.1、算術運算子
在這裡我們假設 X 的值為 2 ,Y 的值為 2。
運算子 | 描述 | 案例說明 |
---|---|---|
+ | 兩個運算元相加 | X + Y = 4 |
- | 從第一個減去第二個運算元 | X - Y = 0 |
* | 將兩個運算元相乘 | X * Y = 4 |
/ | 從第一個除以第二個運算元 | X / Y = 1 |
** | 指數運算子,提出一個運算元到其他的冪值 | X ** Y = 4 |
1.2、關係運算子
關係運算子比較兩個表示式或值,並返回一個布林結果。這裡我們假設X = 2, Y = 3。
運算子 | 描述 | 案例說明 |
---|---|---|
= | 比較兩個值或表示式是否相等 | X = Y (false) |
!=,<>,~=,^= | 比較兩個值或表示式是否不相等 | X !=Y (true) |
< | 比較左邊的值或表示式是否小於右邊 | X < Y (true) |
> | 比較左邊的值或表示式是否大於右邊 | X > Y (false) |
<= | 比較左邊的值或表示式是否小於或等於右邊 | X <= Y (true) |
>= | 比較左邊的值或表示式是否大於或等於右邊 | X >= Y (false) |
1.3、比較運算子
比較運算子是用來將一個表示式與另一個表示式作比較,其結果為true,false 或 null。
運算子 | 描述 | 案例說明 |
---|---|---|
like | 判斷該值與一個自定義的規則是否匹配。 | X = 'g' , X like '%g_' 中 (true) |
between...and | 判斷該值是否在設定值的範圍內。 | X = 3, X between 1 and 5中 (true) |
in | 判斷該值是否屬於一個集合的元素或子集。 | X = 'm', X in ('a','b')中(false) |
in | 判斷值是否是一個集合中的元素或子集。 | |
is null | 判斷該值是否為空 | X = 'a',X is null 中 (false) |
is not null | 判斷該值不為空 | X = ' ', X is not null 中(false) |
提示:在PL/SQL中變數賦值一個空字串時,預設為null。
1.4、邏輯運算子
使用布林運算子併產生布林運算結果。我們在這裡假設 X = true,Y = false。
運算子 | 描述 | 案例說明 |
---|---|---|
and | 邏輯與,如果兩個運算元都為真,則條件成立。 | X and Y (false) |
or | 邏輯或,如果兩個運算元中的任何一個為真,則條件成為真。 | X or Y (true) |
not | 邏輯非,用於反轉其運算元的邏輯狀態。如果條件為真,則邏輯NOT運算子將使其為false 。 | not X (false) |
2、PL/SQL運算子優先順序
運算子優先順序決定表示式中術語的分組。這會影響表示式的評估求值順序。某些運算子的優先順序高於其他運算子; 例如,乘法運算子的優先順序高於加法運算子。
例如,x = 7 + 3 * 2
; 這裡,求值結果x
的值為13
,而不是20
,因為運算子 *
的優先順序高於+
,所以它首先被乘以3 * 2
,然後再加上7
。
在這裡,優先順序最高的運算子出現在表的頂部,最底層的運算子出現在底部。在一個表示式中,將首先評估求值較高優先順序的運算子。
運算子的優先順序如下:=
,<
,>
,<=
,>=
,<>
,!=
,〜=
,^=
,IS NULL
,LIKE
,BETWEEN
,IN
。
運算子 | 操作描述 |
---|---|
** | 指數冥運算子 |
+,- | 識別符號,負數 |
*,/ | 乘法,除法 |
+,- ,|| | 加,減,連線 |
not | 邏輯非 |
and | 邏輯與 |
or | 邏輯或 |
3、運算表示式
3.1、變數賦值運算
在PL/SQL中,變數賦值運算子是 := ,它的語法如下:
variable := expression ;
variable是一個變數,expression是一個表示式。
3.2、字元與數字運算的特點
空值 + 數字 = 空值 ==> null + <Number> = null ;
空值 || 字串 = 字串 ==> null || <Varchar2> = <Varchar2>;
3.3、資料庫賦值運算
資料庫賦值是通過select into 語句來完成的,一般要求被賦值的變數與SELECT中的列名要一一對應。
DECLARE
emp_id emp.empno%TYPE :=7788;
emp_name emp.ename%TYPE;
wages emp.sal%TYPE;
BEGIN
SELECT ename, NVL(sal,0) + NVL(comm,0) INTO emp_name, wages
FROM emp WHERE empno = emp_id;
DBMS_OUTPUT.PUT_LINE(emp_name||'----'||to_char(wages));
END;
提示:select into 語句中不能賦值給布林型別的變數。
3.4、型別轉換的賦值運算
1、char 轉 number,使用 TO_NUMBER內建函式完成轉換。
v_total := TO_NUMBER('100.0') + sal;
2、number 轉 char,使用TO_CHAR內建函式完成轉換。
v_comm := TO_CHAR('123.45') || '元' ;
3、字元 轉 日期,使用TO_DATE內建函式完成轉換。
v_date := TO_DATE('2001.07.03','yyyy.mm.dd');
4、日期 轉 字元,使用TO_CHAR內建函式完成轉換。
v_to_day := TO_CHAR(SYSDATE, 'yyyy.mm.dd hh24:mi:ss') ;