一、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. LuoguP5322 [BJOI2019]排兵布阵(DP)

    城为物,人为容,价值?排序后,一切都明了 #include <iostream> #include <cstdio> #include <cstring> #inc ...

  2. java-面向对象之类、对象

    什么是类?什么是对象? 1)现实世界是由很多很多对象组成的基于对象抽出了类 2)对象:真实存在的单个的个体 类:类别/类型,代表一类个体 3)类中可以包含: 3.1)所有对象所共有的属性/特征---- ...

  3. 深入解析Flutter下一代渲染引擎Impeller

    作者 魏国梁:字节 Flutter Infra 工程师, Flutter Member,长期专注 Flutter 引擎技术 袁    欣:字节 Flutter Infra 工程师, 长期关注渲染技术发 ...

  4. 解决:Uncaught TypeError: $ is not a function

    本来好好的,突然就出现的错误,不过这并不是什么难解决的错误: 我的问题是:在js文件里我定义了一个var $;变量,只要把这个去掉就没问题了. 出现这种错误的解决方法: 1,先看看你的jq文件是否已经 ...

  5. ClickHouse与Elasticsearch压测实践

    1 需求分析 1.1 分析压测对象 1)什么是ClickHouse 和Elasticsearch ClickHouse 是一个真正的列式数据库管理系统(DBMS).在 ClickHouse 中,数据始 ...

  6. 给ShardingSphere提了个PR,不知道是不是嫌弃我

    说来惭愧,干了 10 来年程序员,还没有给开源做过任何贡献,以前只知道嘎嘎写,出了问题嘎嘎改,从来没想过提个 PR 去修复他,最近碰到个问题,发现挺简单的,就随手提了个 PR 过去. 问题 问题挺简单 ...

  7. 配置IConfiguration

    前言 配置是我们必不可少的功能,我们在开发中,经常会遇到需要获取配置信息的需求,那么如何才能优雅的获取配置信息? 我们希望新的配置: 支持强类型 配置变更后通知 学习难度低 快速入门 根据使用场景我们 ...

  8. 如何查找并简单分析core文件

    当系统发生coredump时,通常需要通过分析core文件来定位问题所在,但实际工作中,有时却发现core 文件找不到,或者core文件被删除了. 一.core文件没有生成 KINGBASE core ...

  9. 简述会话跟踪技术——Cookie和Session

    简述会话跟踪技术--Cookie和Session 本篇文章将会简单介绍Cookie和Session的概念和用法 会话跟踪技术 首先我们需要搞清楚会话和会话跟踪的概念: 会话:用户打开浏览器,访问Web ...

  10. java8 新特性 -Optional的常见用法

    1. Optional 一. 简介 Opitonal是java8引入的一个新类,目的是为了解决空指针异常问题.本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为 ...