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.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运算符将使其为 | 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') ;