2020-12-18

星空間發表於2020-12-20

Oracle PL/SQL 第三章--運算子與表示式

目錄

Oracle PL/SQL 第三章--運算子與表示式

1、運算子分類

1.1、算術運算子

1.2、關係運算子

1.3、比較運算子

1.4、邏輯運算子

2、PL/SQL運算子優先順序

3、運算表示式

3.1、變數賦值運算

3.2、字元與數字運算的特點

3.3、資料庫賦值運算

3.4、型別轉換的賦值運算


1、運算子分類

運算子是一個符號,它告訴編譯器執行指定的數學或者邏輯操作。在PL/SQL中也有豐富的幾種內建運算子,有如下幾個型別:

  1. 算術運算子

  2. 關係運算子

  3. 比較運算子

  4. 邏輯運算子

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運算子將使其為falsenot X (false)

 

2、PL/SQL運算子優先順序

運算子優先順序決定表示式中術語的分組。這會影響表示式的評估求值順序。某些運算子的優先順序高於其他運算子; 例如,乘法運算子的優先順序高於加法運算子。

例如,x = 7 + 3 * 2; 這裡,求值結果x的值為13,而不是20,因為運算子 *的優先順序高於+,所以它首先被乘以3 * 2,然後再加上7

在這裡,優先順序最高的運算子出現在表的頂部,最底層的運算子出現在底部。在一個表示式中,將首先評估求值較高優先順序的運算子。

運算子的優先順序如下:=<><=>=<>!=〜=^=IS NULLLIKEBETWEENIN

運算子操作描述
**指數冥運算子
+,-識別符號,負數
*,/乘法,除法
+,- ,||加,減,連線
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') ;