表达式
PL/SQL 语言常见的表达式分为:1,算术表达式.2,字符表达式.3,关系表达式.4,逻辑表达式
1,算术表达式 算术表达式是由数值型常量、变量、函数和算术运算符组成的。算术表达式的计算结果是数值型数据,它使用的运算符主要包括:()、??、?、/、+、-等,运算的优先次序为括号→乘方→乘除→加减。
2,字符表达式字符表达式是由字符或字符串型常量、变量、函数和字符运算符组成,字符表达式的计算结果仍然是字符型。唯一的字符运算符是并置(‖),这个运算符将两个或者多个字符串连接在一起。
如果并置运算中的所有操作数是 CHAR 类型,那么表达式的结果也为 CHAR 类型。如果所有操作数都为 VARCHAR2 类型,那么表达式的结果就为 VARCHAR2 类型。
例如:’PL’‖’/SQL’的结果为’PL/SQL’。
3,关系表达式由字符表达式或者算术表达式与关系运算符组成的。
格式:<表达式 > <关系运算符 > <表达式 >
关系运算符两边表达式的数据类型必须一致,只有相同类型的数据才能比较。
关系表达式的运算结果为逻辑值,若关系表达式成立,结果为真(TRUE),否则为假(FALSE)。
关系运算符主要有如下六种: <、 >、=、<=、 >=、!=。 谓词操作符 LIKE、BETWEEN 和 IN,也可以作为关系运算符。
4,逻辑表达式逻辑表达式是由关系表达式和逻辑运算符组成。逻辑表达式的运算结果为逻辑值。逻辑运算符包括:NOT、OR、AND。逻辑运算符的运算优先次序为 NOT → AND → OR。逻辑表达式的一般格式为:
<关系表达式 > <逻辑运算符 > <关系表达式 >
关系表达式和逻辑表达式实际上都是布尔表达式,其值为布尔值(TRUE,FALSE 或者NULL)。
绑定变量
绑定变量也称为主机变量。这些变量在SQL*PLUS环境中声明,匿名块不带任何参数。
好处:
1,绑定变量可以作为参数传递给过程和参数。
2,能够重复利用执行计划。
声明绑定变量的语法是:
VARIABLE variablename datatype
例:SQL > variable gno number
Sql*plus 中使用绑定变量sql > variable emp_no number;
sql > exec :emp_no := 7900;
PL/SQL 过程已成功完成。
sql > SELECT ename,sal,deptno from emp WHERE empno =:emp_no;
使用局部变量v_num和绑定变量g_num绑定变量g_num在SQL*PLUS中用VARIABLE语句来声明。程序块用冒号前缀(:)引用。局部变量不需使用冒号前缀。
SQL > variable g_num number
SQL > declare
2 v_num number;
3 begin
4 v_num:=3;
5 :g_num:=v_num * 2;
6 end;
7 /
SQL > print g_num
PL/SQL中的替换变量PL/SQL没有输入能力。通过“&”加标识符即为替换变量,通过替换变量可以在PL/SQL中进行输入,并可以方便地达到创建通用脚本的目的。
SQL > variable g_num number
SQL > declare
v_num number;
begin
v_num:=&p_num;
:g_num:=v_num * 2;
end;
/
例:创建通用脚本,Employees表中插入数据。
SQL >insert into emp(empno,ename,sal,deptno) values (&empno ,&ename,&sal,&deptno);
SQL > /
输入 empno 的值: 7811
输入 ename 的值: 'jamw'
输入 sal 的值: 3000
输入 deptno 的值: 30
已创建 1 行。
控制结构
PL/SQL 支持的流程控制结构:
1,条件控制
IF 语句
CASE 语句
2,循环控制
LOOP 循环
WHILE 循环
FOR 循环
3,顺序控制
GOTO 语句
NULL 语句
条件控制IF 语句根据条件执行一系列语句,有三种形式:IF-THEN、IF-THEN-ELSE 和 IF-THEN-ELSIF
示例:
DECLARE
v_job VARCHAR2(10);
v_sal number(6,2);
BEGIN
SELECT job,sal INTO v_job,v_sal FROM emp WHERE
empno=&&no;
IF v_job = ‘CLERK’ THEN
UPDATE emp SET sal=v_sal+200 WHERE empno=&&no;
ELSIF v_job= ‘SALESMAN’ THEN
UPDATE emp SET sal=v_sal+100 WHERE empno=&&no;
ELSE
UPDATE emp SET sal=v_sal+500 WHERE empno=&&no;
END IF;
END;
CASE 语句用于根据单个变量或表达式与多个值进行比较,执行 CASE 语句前,先计算选择器的值
示例:
BEGIN
CASE ‘&grade’
WHEN ’A’ THEN DBMS_OUTPUT.PUT_LINE(’优异’);
WHEN ’B’ THEN DBMS_OUTPUT.PUT_LINE (优秀’);
WHEN ’C’ THEN DBMS_OUTPUT.PUT_LINE (’良好’);
WHEN ’D’ THEN DBMS_OUTPUT.PUT_LINE (’一般’);
WHEN ’F’ THEN DBMS_OUTPUT.PUT_LINE (’较差’);
ELSE DBMS_OUTPUT.PUT_LINE (’没有此成绩’);
END CASE;
END;
循环控制循环控制用于重复执行一系列语句,循环控制语句包括:
LOOP、EXIT 和 EXIT WHEN
循环控制的三种类型:
LOOP - 基本循环,无条件循环
示例:
LOOP
sequence_of_statements
END LOOP;
WHILE - 根据条件循环
示例:
WHILE condition LOOP
sequence_of_statements
END LOOP;
FOR - 循环固定的次数
示例:
FOR counter IN [REVERSE] value1..value2
LOOP
sequence_of_statements
END LOOP;
基本循环例 使用基本循环。该例程当X值为1010时退出循环。
SQL > DECLARE
X INT :=100;
Y INT;
BEGIN
LOOP
X:=X+10;
EXIT WHEN X >1000;
END LOOP;
Y:=X;
END;
/
WHILE循环例 使用WHILE循环。该例程当X值为1010时退出循环。
SQL > declare
x number:=100;
y number:=0;
begin
while x<=1000
loop
x:=x+10;
end loop;
y:=x;
end;
/
FOR循环例 使用FOR循环。X累计加10,循环10次后退出。
SQL > DECLARE
x number:=100;
y number:=0;
begin
FOR v_counter in 1..10 loop
x:=x+10;
END LOOP;
y:=x;
end;
练习:不同条件修改员工信息,使用顺序控制结构
例6.10 使用GOTO语句。该例程当员工薪水小于800时转到update标签处修改员工薪水提高100。否则转quit标签什么也不做
SQL >declare
salary emp.sal%type;
begin
select sal into salary from emp where empno=7369;
if salary < 800 then
goto update;
else
goto quit;
end if;
<<update > >
update emp set sal=salary + 100 where empno=7369;
<<quit > >
NULL;
end;
/
本示例适用于教学大纲,电子档下载地址:
Oracle学习情境4:统计分析与报表