一、PLSQL编程

1.1、使用PLSQL实现 Hello world!

 1 -- Created on 2022/8/22 by ADMINISTRATOR
2 declare
3 -- 这是申明变量的地方,还包括游标
4 -- 相当于public class A()
5 i integer;
6 begin
7 -- Test statements here
8 -- 执行部分
9 -- public static void main(String args[]){}
10 ​
11 -- 异常处理
12 dbms_output.put_line('hello world!');
13 end;

1.2、有关变量的定义和使用

PLSQL编程中的变量主要有两大类:

  1. 普通数据类型:(char、varchar2、data、number、boolean、long)

  2. 特殊变量类型:(引用型变量、记录型变量)

1.2.1普通变量的申明和打印:

赋值方式:

  1. 直接赋值:使用 := 符号进行变量的赋值,可以在声明变量时直接赋值,也可以在 begin 中直接赋值;

  2. 语句赋值:使用 select……into……赋值(语法:select 值 into 变量)

 1 -- 声明一个人的信息,姓名、薪水、地址
2 declare
3 -- Local variables here
4 -- 姓名
5 v_name varchar2(50) := '张三丰';
6 ​
7 -- 薪水
8 v_salary number;
9 ​
10 -- 地址
11 v_addr varchar2(200);
12 begin
13 -- Test statements here
14 -- 直接赋值
15 v_salary := 15900;
16 ​
17 -- 语句赋值
18 select '江苏连云港' into v_addr from dual;
19
20 dbms_output.put_line('姓名:' || v_name || ',薪水:' || v_salary || ',地址:' || v_addr);
21
22 end;

1 姓名:张三丰,薪水:15900,地址:江苏连云港


1.2.2引用型变量的使用

引用型变量的类型和长度取决于表中字段的类型和长度

通过表名.列名%TYPE来指定变量的类型和长度,例如:v_id A_XX.A_ID%TYPE;

【查询A_XX表中ID为2的员工信息,包括ID,地址,并打印出来】

 1 declare
2 -- Local variables here
3 -- ID
4 v_id A_XX.A_ID%TYPE;
5 -- 地址
6 v_addr A_XX.ADDRESS%TYPE;
7 begin
8 -- Test statements here
9 -- 语句赋值
10 select a_id , address into v_id , v_addr from A_XX where a_id = 2;
11
12 dbms_output.put_line('ID:' || v_id || ',地址:' || v_addr);
13
14 end;

1 ID:2,地址:xyz

 

使用引用变量的好处:

相比较普通类型变量需要知道变量的类型和长度而言,引用变量不用考虑表中字段的类型和长度,使得PLSQL编程更加灵活,更加适应数据库的动态更新。

1.2.3记录型变量的使用

记录型变量是用来存储一行数据,相当于JAVA中对象的使用;

基本语法为:变量名 表名%ROWTYPE,例如:v_AA A_XX%ROWTYPE;

 1 declare
2 -- Local variables here
3 -- ID
4 v_AA A_XX%ROWTYPE;
5 ​
6 begin
7 -- Test statements here
8 -- 语句赋值
9 select * into v_AA from A_XX where a_id = 2;
10
11 dbms_output.put_line('ID:' || V_AA.A_ID || ',地址:' || V_AA.ADDRESS);
12
13 end;

1 ID:2,地址:xyz

记录型变量适用于一行中变量多的情况下

1.3、流程控制语句

1.3.1条件分支

1 begin
2 IF 条件1 THEN 执行1
3 ELSIF 条件2 THEN 执行2
4 ELSE 执行3
5 END IF;
6 end;

注意关键字ELSIF

1.3.2循环语句

Oracle中有三种循环,这里介绍loop循环

1 begin
2 LOOP
3 EXIT WHEN 退出循环条件
4 END LOOP;
5 end;

【打印数字1-10】

 1 declare
2 -- Local variables here
3 -- 设置循环变量并赋初值
4 v_num NUMBER := 1;
5
6 begin
7 -- Test statements here
8 -- LOOP循环
9 LOOP
10 EXIT WHEN V_NUM > 10;
11 dbms_output.put_line(V_NUM);
12 -- 循环自增
13 V_NUM := V_NUM + 1;
14 END LOOP;
15 end;

输出结果:
 1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10

二、游标

2.1什么是游标

用于临时储存一个查询返回的多行数据,(结果集,相当于JAVA中的Resultset结果集),可以通过游标遍历,逐行访问处理这个结果集中的数据。

游标的使用步骤:声明——>打开——>读取——>关闭

2.2语法

 1 -- 声明游标
2 CURSOR 游标名[(参数列表)] IS 查询语句;
3
4 -- 游标打开
5 OPEN 游标名;
6
7 -- 游标的取值
8 FETCH 游标名 INTO 变量列表;
9
10 -- 游标的关闭
11 CLOSE 游标名;

2.3游标的属性

游标的属性 返回值类型 说明
%ROWCOUNT 整型 获得FETCH语句返回的数据行数
%FOUND 布尔型 最近的FETCH语句返回一行数据为真,否则为假
%NOTFOUND 布尔型 最近的FETCH语句返回一行数据为假,否则为真
%ISOPEN 布尔型 游标打开为真,否则为假

【游标的使用】

 1 declare
2 -- 声明一个游标
3 CURSOR C_AA IS
4 SELECT A_ID, ADDRESS FROM A_XX;
5 -- 定义引用变量接收游标中的值
6 V_ID A_XX.A_ID%TYPE;
7 V_ADDR A_XX.ADDRESS%TYPE;
8 begin
9 -- 打开游标
10 OPEN C_AA;
11 -- 读取游标中的值
12 LOOP
13 -- 获取游标中的数据,如果有,赋值给变量
14 FETCH C_AA
15 INTO V_ID, V_ADDR;
16 EXIT WHEN C_AA%NOTFOUND;
17 dbms_output.put_line('ID:' || V_ID || ',地址:' || V_ADDR);
18 END LOOP;
19 -- 关闭游标
20 CLOSE C_AA;
21 end;

三、存储过程

3.1存储过程的概念

之前我们编写的PLSQL程序可以对表进行操作、判断、循环逻辑处理的过程,但无法重复使用;

可以理解为我们将这些程序代码写在了main方法中,作为匿名程序使用,而JAVA是通过将匿名程序封装成方法或对象来实现代码的复用性;

作为PLSQL程序而言,是通过将程序代码存储起来,来实现程序过程的复用性,而这些被存储起来的PLSQL程序,被称之为存储过程

3.2存储过程的作用

  1. 在开发程序过程中,为了一个特定的业务功能,需要不断地向数据库进行连接关闭,(连接关闭是很耗费资源的),需要对数据库进行多次的I/O读写,性能较低;如果将这些业务放到PLSQL程序中,在应用程序中只需要调用PLSQL就可以完成连接关闭一次数据库,可以大大提高效率。

  2. Oracle官方:能够让数据库操作的,不要放在程序代码中。

3.3语法

1 create or replace procedure 过程名称[(参数列表)] is
2 begin
3
4 end 过程名称;

【示例】

1 create or replace procedure p_hello is
2 begin
3 dbms_output.put_line('hello');
4
5 end p_hello;

根据参数类型,可以将其分为三类:

  1. 不带参数的

  2. 带输入参数

  3. 带输入输出参数(返回值)

3.4无参存储

【示例】

在PROCEDURES中创建一个新的无参存储,并打印hello:

1 create or replace procedure p_hello is
2 begin
3 dbms_output.put_line('hello');
4
5 end p_hello;

使用Test Window,调用刚才创建的无参存储:

1 -- Created on 2022/8/22 by ADMINISTRATOR
2 declare
3 -- Local variables here
4 --i integer;
5 begin
6 -- Test statements here
7 p_hello;
8 end;

输出结果:

hello

注意:

  • is和as是可以互用的,用哪一个都可以;

  • 过程中没有declare关键字,declare用在语句块中;

3.5带输入参数的存储过程

【示例:使用带输入参数的存储过程打印编号为1的地址】

PROCEDURES带输入参数的存储过程:

1 create or replace procedure p_queryaddr(i_id IN A_XX.A_ID%TYPE) is
2 --变量声明
3 V_ADDR A_XX.ADDRESS%TYPE;
4 begin
5
6 SELECT ADDRESS INTO V_ADDR FROM A_XX WHERE A_ID = I_ID;
7 dbms_output.put_line('地址:' || V_ADDR);
8
9 end p_queryaddr;

Test Window 调用带输入参数的存储过程:

1 declare
2 -- Local variables here
3 --i integer;
4 begin
5 -- Test statements here
6 p_queryaddr(1);
7 end;

输出结果:

地址:xxx

3.6带有输入和输出参数的存储过程

【示例】

PROCEDURES:

1 create or replace procedure p_queryaddr_OUT(i_id IN A_XX.A_ID%TYPE , o_addr OUT A_XX.ADDRESS%TYPE) is
2
3 begin
4
5 SELECT ADDRESS INTO O_ADDR FROM A_XX WHERE A_ID = I_ID;
6
7 end p_queryaddr_OUT;

Test Windows:

 1 declare
2 -- Local variables here
3 V_ADDR A_XX.ADDRESS%TYPE;
4 begin
5 -- Test statements here
6 p_queryaddr_OUT(1, V_ADDR);
7
8 dbms_output.put_line(V_ADDR);
9
10 end;

输出结果:

xxx
 

Oracle数据库PLSQL编程和存储过程的更多相关文章

  1. 2018.5.30 Oracle数据库PLSQL编程---游标的使用

    显示游标的步骤 /* 显示游标处理步骤 1.声明游标 语法结构:cursor 游标名称 is SQL 语句; 2.打开游标 语法结构:open游标名称; 3.提取数据 语法结构:fetch 4.关闭游 ...

  2. 改写了禁用或启用oracle数据库的约束的存储过程

    改写了网上某位大侠(最开始的源头是哪位没记住)写的禁用或启用oracle数据库所有约束的存储过程,增加了异常控制,以使发生异常时也可以执行下去. –调用过程: 执行前先 set serveroutpu ...

  3. 【Java EE 学习 29 下】【JDBC编程中操作Oracle数据库】【调用存储过程的方法】

    疑问:怎样判断存储过程执行之后返回值是否为空. 一.连接oracle数据库 1.需要的jar包:在安装的oracle中就有,所以不需要到官网下载,我的oracle11g下:D:\app\kdyzm\p ...

  4. 用Excel导入Oracle数据库plsql

    打开plsql之后,在工具栏点击[tools]--[ODBC Imoprter] 选择导入文件的类型,这里是excel文件,所以选择Excel Files 输入连接数据库的用户名和密码 点击Conne ...

  5. Oracle数据库PLSQL的中文乱码显示全是问号

    plsql连接数据库乱码问题 缘由: 小师妹周末叫我帮她重装数据库,这么大好的周末时光不出去玩儿,给她装数据库这不是很蛋疼么. 我问她为什么要重装,她说:数据存入数据库后,中文字符有乱码,一定是我上次 ...

  6. oracle学习1 基于oracle数据库的PLSQL编程以及存储过程的创建和使用视频

    https://www.bilibili.com/video/av46777605 plsql中选择testWindow中可以进行测试 1.编写函数在plsql的testwindow中 begin d ...

  7. Oracle基础 PL-SQL编程基础(4) 异常处理

    异常处理: 即使良好的PL-SQL程序也会遇到错误或者未预料的事件,一个优秀的程序都应该能够处理各种出错情况,尽可能的从错误中恢复.程序在运行时出现的错误成为异常.发生异常后,语句讲终止执行,PLSQ ...

  8. Oracle基础 PL-SQL编程基础(1) 变量和常量

    一.什么是PL-SQL PL-SQL是结合了Oracle过程语言和结构化查询语言(SQL)的一种扩展语言.具体来说,PL-SQL就是在普通的SQL语句的基础上增加了编程语言的特点,将数据操作和查询语句 ...

  9. PLSQL编程及存储过程的创建

    一.PLSQL的初步介绍 PLSQL是使sql具有处理过程的能力,可以分为三个部分:声明部分.可执行部分.异常处理部分 1.如何使用PLSQL打印Hello World! 在sqlplus里中打印   ...

随机推荐

  1. vue 使用 monaco-editor 实现在线编辑器

    前言 项目里使用到 monaco-editor 编辑器,实现源码编辑器,看了很多网上教程,记录一下实现过程.在此之前引用很多博主的方法安装但是引入的时候,运行项目总是各种各样的错误,找不到头绪.终于在 ...

  2. MySQL-配置参数时 报错:remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu......

    报错:remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu...... 原因: 1.第一次配置参数时,不完整,出现错误!,(报错也会产生CMak ...

  3. MybatisPlus——实现多数据源操作

    多数据源 适用:一般工作时候会有多个数据库,每个库对应不同的业务数据.程序如果每次数据都访问同一个数据库,该数据库压力很大访问会很慢. 官方文档:https://baomidou.com/(建议多看看 ...

  4. 从0搭建Vue3组件库:button组件

    button组件几乎是每个组件库都有的:其实实现一个button组件是很简单的.本篇文章将带你一步一步的实现一个button组件.如果你想了解完整的组件库搭建,你可以先看使用Vite和TypeScri ...

  5. KingbaseES V8R6 锁等待检测

    背景 对于多数数据库,dba技能之一就是查找锁.锁的存在有效合理的在多并发场景下保证业务有序进行.下面我们看一下KingbaseESV8R6中查找阻塞的方法. 1.找到"被阻塞者" ...

  6. 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(19)-Fiddler精选插件扩展安装,将你的Fiddler武装到牙齿

    1.简介 Fiddler本身的功能其实也已经很强大了,但是Fiddler官方还有很多其他扩展插件功能,可以更好地辅助Fiddler去帮助用户去开发.测试和管理项目上的任务.Fiddler已有的功能已经 ...

  7. OpenCV读写视频操作

    一.读取视频流 在使用OpenCV读取摄像头,或者处理一些磁盘中保存的视频文件时,通常使用VideoCapture进行读取. std::string video_path("/path/to ...

  8. 若依(RuoYi )权限管理设计

    前言 若依权限管理包含两个部分:菜单权限 和 数据权限.菜单权限控制着我们可以执行哪些操作.数据权限控制着我们可以看到哪些数据. 菜单是一个概括性名称,可以细分为目录.菜单和按钮,以若依自身为例: 目 ...

  9. Prometheus 监控报警系统 AlertManager 之邮件告警

    转载自:https://cloud.tencent.com/developer/article/1486483 文章目录1.Prometheus & AlertManager 介绍2.环境.软 ...

  10. Docker MySql 查看版本的三种方法

    目录 Docker MySql 查看版本的三种方法 1.mysql -V命令查看版本 2.status命令查看版本 3.version命令查看版本 Docker MySql 查看版本的三种方法 1.m ...