版权声明:本文为博主原创,转载请附原文链接。 https://blog.csdn.net/bibibrave/article/details/82724714
例子讲解:
PL/SQL +序列
回顾:关于序列有两个伪列:nextval 返回序列的下一个值、currval 返回序列的当前值。
通常使用语句 select seq1 nextval from dual; 来查询序列的值。而结合PL/SQL我们可以采用如下方法:
-- 创建一个序列
create sequence seq1 start with 1 increment by 1;
--打开开关
set serverout on
--plsql
declare
aa int ;
begin
aa := seq1.nextval; -- 等同 select seq1.nextval into aa from dual;
dbms_output.put_line('aa的值是'||aa);
end;
/ --表示执行plsql命令 (本个) 单一输入/表示执行上一个plsql段
一、逻辑比较
逻辑比较用于比较变量和常量的值,这些表达式称为布尔表达式
布尔表达式由关系运算符与变量或常量组成
布尔表达式的结果为TRUE、FALSE或NULL,通常由逻辑运算符AND、OR和NOT连接
布尔表达式有三种类型:
数字布尔型
字符布尔型
日期布尔型
二、条件、循环、顺序
PL/SQL 支持的流程控制结构:
条件控制
IF 语句
CASE 语句
循环控制
LOOP 循环
WHILE 循环
FOR 循环
顺序控制
GOTO 语句
NULL 语句
(1)分支判断语句 if 、case:
(1)
IF 语句根据条件执行一系列语句,有三种形式:IF-THEN、IF-THEN-ELSE 和 IF-THEN-ELSIF
假设有一个学生表包含三列 学号 姓名 生日,现在要求判断指定学生的年龄是否大于25岁。
declare
bage student.birthday%type
begin
select birthday into bage from student where sno=2;
if birthday <to_char('19930101' , 'yyyymmdd') then
dbms_output.put_line('该生大于25岁');
else
dbms_output.put_line('该生小于等于25岁');
end if ;
end;
/
(2)
CASE 语句用于根据单个变量或表达式与多个值进行比较
执行CASE 语句前,先计算选择器的值
declare
outgrade varchar2(20);
begin
outgrade :=CASE &grade
WHEN 'A' THEN '优秀'
WHEN 'B' THEN '良好'
WHEN 'C' THEN '中等'
WHEN 'D' THEN '及格'
WHEN 'E' THEN '不及格'
ELSE '没有此成绩'
end;
dbms_output.put_line( outgrade );
END;
/
输入 grade 的值: 'A'
原值 4: outgrade :=CASE &grade
新值 4: outgrade :=CASE 'A'
优秀
(2)循环控制:loop 、for、 while
loop
declare
i number :=0;
begin
i :=1;
loop
dbms_output.put_line(i||'--');
exit when i>7; -- loop 的停止条件
i :=i+1;
end loop;
dbms_output.put_line('-end-');
end;
/
while
declare
j number :=0;
begin
j :=1;
while j<=8 --声明while条件 执行循环的条件
loop
dbms_output.put_line(j||'--');
j :=j+1;
end loop;
dbms_output.put_line('-end-');
end;
for
declare
m number :=0;
begin
for m in 1..8 loop
dbms_output.put_line(m||'--');
end loop;
dbms_output.put_line('-end-');
end;
结果:
1--
2--
3--
4--
5--
6--
7--
8--
-end-
exit when j>4 ; 循环提前结束条件。
(3)continue 的用法 跳出本次循环进入下一次
declare
i number :=1;
begin
loop
i := i +1;
exit when i>8;
continue when i<4;
dbms_output.put_line(to_char(i));
end loop;
end;
/
结果为:
4
5
6
7
8
(4) 跳转 goto 、顺序null;
declare
i number :=1;
begin
i :=1;
<<aa>>
dbms_output.put_line(to_char(i));
i := i +1;
if i<=7 then goto aa; end if;
if i>7 then goto bb; end if;
<<bb>> null;
dbms_output.put_line('结束');
end;