oracle 中的PL/SQL基础(下)

版权声明:本文为博主原创,转载请附原文链接。 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;

猜你喜欢

转载自blog.csdn.net/bibibrave/article/details/82724714