作为程序员,Oracle复杂sql不会写,PL/SQL值得你学习

这篇文章主要讲述PL/SQL语言,可能没仔细学过的都会以为他不就是一个oracle客户端,不是这样的哦,他是一种过程化编程语言,他的功能建立在SQL之上,可以用来编写包含SQL语句的程序。需要的朋友们下面随着小编来一起学习学习吧。

个人感觉PL/SQL语言还是特别有用的,我已经遇到很多次普通SQL解决不了的问题了。不知道你们是否遇到过。

PL/SQL简介

PL/SQL是一种过程化语言,在PL/SQL中可以通过IF语句或LOOP语句实现循环,甚至可以定义变量,跟我们后端代码很相似。

像我们普通的SQL语句(如DML语句、DQL语句)那样没有流程控制,也不存在变量。当然PL/SQL允许内部嵌套普通的SQL,他可以配合SQL语句来完成一些纯SQL完不成的语法。

在开发当中一般我们处理复杂的历史数据,或者程序优化当中都会用到。

PL/SQL块结构

PL/SQL程序都是以块为基本单温,整个PL/SQL块分为三部分

declare
  --声明部分,不定义变量的情况下可以省略declare
begin
  --执行部分,必须
exception
  --异常处理部分,可选可不选
end;

声明部分(用declare开头)

声明部分用declare开头,到begin结束,在这之间可以用来写变量、常量、游标等…

执行部分(以begin开头)

执行部分以关键字BEGIN开始,如果代码出现异常,则执行完异常处理就结束,没有异常就以关键字END结束,逻辑控制和运算都是在这部分写,可以写多个PL/SQL语句和SQL语句。

异常处理部分(以exception开头)

异常处理部分以exception开始,这个关键字执行完,就代表着整个PL/SQL块结束了,在执行PL/SQL代码(主要执行部分)的过程,可能会出现一些意想不到的错误,比如除数为0,空值参与运算等,这些错误都会导致程序中断,我们可以在这部分进行一些异常处理,当报错的时候提示错误信息,这样好快速锁定错误原因。我们可以使用WHEN THEN语句来实现对分支判断,类似IF,然后每个分支下通过编写代码来处理异常。

其中begin执行部分是必须的,其他两个部分可选可不选。

注意:每条语句必须以分号;结束。可以写成多行,但是也得以分号结束。

PL/SQL如何快速创建

本人用的是plsqldev客户端,当然创建出来的没有exception异常处理,自己加上就好了。
这个Test windou就是专门来写PL/SQL的,他还支持debug。

虽然他的语句在普通sql窗口也可以执行,但是这里我还是建议调试或者学习的话来使用这个窗口,从DBMS窗口可以看打印的值。

在这里插入图片描述

PL/SQL简单代码示例

这个示例当中涉及到了循环、遍历、变量赋值、输出语句、异常处理这几个常用的。可能对于一点都没接触过的,看的有点萌萌的,你可以直接复制这个代码到你的客户端学习。

-- Created on 2020/12/17 by GUO 
declare
  i int := 3; --声明一个变量i = 3
  c number;
begin
  --定义一个循环,当i大于-2的时候退出循环
  while i > -2 loop
    i := i - 1; --等同于 i = i--
    c := i / i; --c = i除i ,也就是i终究会有等于0的时候
    dbms_output.put_line(c);
  end loop;
exception
  WHEN zero_divide then
    dbms_output.put_line('除数不能为零!');
end;

运行结果:

从这里可以看到dbms_output.put_line为我们打印的值。

理论上他还应该再输出一个1,因为我写的>-2退出循环,但是当他等于0的时候,已经0做除数报错了,所以执行部分直接给终止了,跳到了异常处理。

在这里插入图片描述

语法上需要注意的

1、注释我们一般用–(两个横杠),但是超过一行,就必须在每一行的开头都适用–(连接符)
2、多行注释可以采用 /* 开头,以 */ 结尾
3、定义变量,每行只能定义一个变量或常量
4、定义变量,名称必须以(A-Z,a-z)开始,最大长度30,如果以其他字符开始,那么必须要双引号扩住
5、定义变量,名称只能使用A-Z,a-z,0-9,_,$,#,如果以其他字符开始,那么必须要双引号扩住
6、定义变量,名称不能使用关键字,例如select update等,如果使用这些关键字命名,必须要双引号扩住。
7、变量赋值,字符串文本赋值,必须用单引号引住。
8、在oracle 10g之后,变量赋值如果字符串当中包含单引号,也可以使用[],{},<>进行赋值。那么不仅需要在分隔符前后加单引号,而且前缀要加个q,示例:

A:= q'[iwdwad]';

文章总结

本篇文章只能让你初步了解PL/SQL的强大,以及他都能干什么,在后续我尽量抽时间对PL/SQL当中的变量,游标等等功能进行总结。

这是本人昨天刚整理出来的PL/SQL支持的三种循环,想要深度学习的可以再看看这篇文章。

PL/SQL循环: https://blog.csdn.net/weixin_43888891/article/details/111305170.

猜你喜欢

转载自blog.csdn.net/weixin_43888891/article/details/111318866