PL/SQL入门使用详解

2021-03-10  本文已影响0人  moutory

前言

PL/SQL是Oracle数据库对SQL语句的扩展,可以让我们实现ifelse等逻辑判断、for循环执行等功能加入到SQL逻辑的执行过程中,很大程度上提高了SQL的灵活性,也能让我们更好的处理日常工作中遇到的一些复杂的业务场景。本文将对PL/SQL语言的基本语法和使用进行简要的讲解,希望能够对各位读者有所帮助。

一、PL/SQL简介

PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算

二、PL/SQL语法介绍

1、PL/SQL的总体书写格式
[declare]
   --声明变量
begin
   -- 程序体
[exception]
   --例外;异常
end;
--declare和exception部分可以没有,但是begin部分和end必须要有。

其中declareexception为可选模块,作用分别是申明变量和异常处理,beginend为必要模块,我们一般在begin模块中写入我们的具体代码语句,end用于标识语句已经结束。

入门小案例
案例输出结果
(二)变量的定义

有些读者可能已经注意到,在上面的例子中我们定义了一个变量i,并在后面的语句中使用了这个变量。在
PL/SQL中可使用标识符来声明变量、常量、游标、用户定义的异常等,并在SQL语句或过程化的语句中使用。
那么变量的定义格式是怎么样的呢?
变量名称 变量类型 [NOT NULL] [:= |DEFAULT expr] ;
其中:=为赋值符号,后面接着具体要赋的值。使用NOT NULL约束条件定义变量时,必须为变量赋予一个值。
变量的类型分解类型可以分为如下三类:

变量分类 变量类型
标量类型 数字、字符、布尔、日期时间
LOB类型 BFILE、BLOB、CLOB、NCLOB
属性类型 %TYPE、%ROWTYPE

其中,标量类型只能存储单值、内部没有分量(即非对象类型),像数值、字符、日期等就都属于是标量类型;
LOB类型表示大型的对象;
属性类型看起来似乎有点抽象,其实它相当于是一种逻辑的抽象,比如%TYPE可以用来表示表中的字段属性,%ROWTYPE可以表示表中的数据行,我们把这些属性抽象成一个对象来使用,可以减少我们在实际写代码的工作量。

下面我们来用属性类型的变量来写一个小例子:

%TYPE演示用例
在这个案例中我们想要打印出员工号为7566的姓名,但是我们并不知道在EMP表中,ENAME的数据类型是什么,我们可以直接使用表名.列名%TYPE的方式来将这个字段的类型赋予给变量名v_name。并在执行查询语句时,使用into关键字将查询到的字符赋值给变量v_name,最后实现变量的输出。
同理,%ROWTYPE的使用也十分的方便,再看一下下面这个小例子
%ROWTYPE演示用例
%ROWTYPE演示结果

我们把v_row的数据类型定义为ROWTYPE,表示一行数据,在查询过程中将查询到的数据用into关键字赋值给我们的行变量。最后使用行变量.字段名称的方式输出对应的结果

(三)控制语句结构之条件控制
1、 条件语句IF
IF <布尔表达式> THEN
  PL/SQL 和 SQL语句
ELSIF < 其它布尔表达式> THEN
  其它语句
ELSIF < 其它布尔表达式> THEN
  其它语句
ELSE
  其它语句
END IF;

演示用例:

declare
 i int := dbms_random.value(0,10);
begin
  if i<4 then
    dbms_output.put_line('num is less then 4');
  elsif i<6 then
    dbms_output.put_line('num is less then 6');
  else
    dbms_output.put_line('num is more then or eq  6');
  end if;
  
end;

这里需要记住elsif的写法,不要拼写错误了

2、 条件语句CASE
CASE 条件表达式
  WHEN 条件表达式结果1 THEN 
     语句段1
  WHEN 条件表达式结果2 THEN
     语句段2
  ......
  WHEN 条件表达式结果n THEN
     语句段n
  [ELSE 条件表达式结果]
END;

------------------

CASE 
  WHEN 条件表达式1 THEN
     语句段1
  WHEN 条件表达式2 THEN
     语句段2
  ......
  WHEN 条件表达式n THEN 
     语句段n
  [ELSE 语句段]
END;

演示用例:

DECLARE
  V_grade char(1) := UPPER('&p_grade');
  V_appraisal VARCHAR2(20);
BEGIN
  V_appraisal :=
  CASE v_grade
    WHEN 'A' THEN 'Excellent'
    WHEN 'B' THEN 'Very Good'
    WHEN 'C' THEN 'Good'
    ELSE 'No such grade'
  END;
  DBMS_OUTPUT.PUT_LINE('Grade:'||v_grade||'  Appraisal: '|| v_appraisal);
END;

DECLARE
   v_first_name employees.first_name%TYPE;
   v_job_id employees.job_id%TYPE;
   v_salary employees.salary%TYPE;
   v_sal_raise NUMBER(3,2);
BEGIN
   SELECT first_name,   job_id,   salary INTO
          v_first_name, v_job_id, v_salary
   FROM employees WHERE employee_id = &emp_id;
   CASE
      WHEN v_job_id = 'PU_CLERK' THEN
         IF v_salary < 3000 THEN v_sal_raise := .08;
         ELSE v_sal_raise := .07;
         END IF;
      WHEN v_job_id = 'SH_CLERK' THEN
         IF v_salary < 4000 THEN v_sal_raise := .06;
         ELSE v_sal_raise := .05;
         END IF;
      WHEN v_job_id = 'ST_CLERK' THEN
         IF v_salary < 3500 THEN v_sal_raise := .04;
         ELSE v_sal_raise := .03;
         END IF;
      ELSE
         DBMS_OUTPUT.PUT_LINE('该岗位不涨工资: '||v_job_id);
   END CASE;
   DBMS_OUTPUT.PUT_LINE(v_first_name||'的岗位是'||v_job_id
                                    ||'、的工资是'||v_salary
                                    ||'、工资涨幅是'||v_sal_raise);
END;

这里要注意,演示用例在定义变量的时候使用到了&这个符号,这个符号表示该变量的值会在执行过程中由执行者手动输入再确定。

(四)控制语句结构之循环控制

PL/SQL中一共有三种循环方式,分别是while、loop和for。下面来讲解一下三种循环方式的使用:


1. loop循环(类似于java中的do while循环)
loop
    要执行的语句
exit when <条件语句>;
end loop;

演示用例:

declare
 i int := 1;
begin
 loop 
   dbms_output.put_line(i);
   i := i+1;
  exit when i>10;
  end loop;
end;

2. while循环
while <布尔表达式> loop
    要执行的语句;
end loop;

演示用例:

declare
 i int := 1;
begin
 while i<10 loop
   dbms_output.put_line(i);
   i := i+1;
   end loop;
end;

3. for循环
for 循环计数器 in [reverse] 下限..上限 loop
    要执行语句;
end loop;

演示用例:

declare

begin
 for i in 1..10 loop
   dbms_output.put_line(i);
   end loop;
end;

使用for循环的时候,可以不用再前面的declare模块中定义数值变量i,在for中直接使用即可。

(五)代码块注释

在PL/SQL中使用--表示单行注释,用/**/表示多行注释

注释演示用例

关于PL/SQL基本的入门语法就介绍到这里了,有需要了解更多PL/SQL的高阶用法的读者,可以在参考资料中阅读或者自行百度。

参考资料:
PLSQL编程详解 :https://www.jianshu.com/p/3d5acb46936e
PL/SQL 编程语言 : https://www.cnblogs.com/wlym/p/7455650.html

上一篇 下一篇

猜你喜欢

热点阅读