一、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. Linux 09 Vim

    参考源 https://www.bilibili.com/video/BV187411y7hF?spm_id_from=333.999.0.0 版本 本文章基于 CentOS 7.6 概述 Vi Vi ...

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

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

  3. java学习第一天.day06

    方法 方法的优点 1. 使程序变得更简短而清晰. 2. 有利于程序维护. 3. 可以提高程序开发的效率. 4. 提高了代码的重用性. static的作用 static在方法中如果没有添加就只能用对象调 ...

  4. Java 断点下载(下载续传)服务端及客户端(Android)代码

    原文: Java 断点下载(下载续传)服务端及客户端(Android)代码 - Stars-One的杂货小窝 最近在研究断点下载(下载续传)的功能,此功能需要服务端和客户端进行对接编写,本篇也是记录一 ...

  5. java方法---递归

    java方法递归 1.什么是递归 就是自己调用自己: 2.递归结构的两个部分 递归头:什么时候不调用自身方法.如果仅有头,将陷入死循环.递归体:什么时候需要调用自身方法.

  6. 「学习笔记」字符串基础:Hash,KMP与Trie

    「学习笔记」字符串基础:Hash,KMP与Trie 点击查看目录 目录 「学习笔记」字符串基础:Hash,KMP与Trie Hash 算法 代码 KMP 算法 前置知识:\(\text{Border} ...

  7. AI听曲识歌!哼曲、口哨吹,都能秒识! ⛵

    作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 自然语言处理实战系列:https://www.showmeai.tech ...

  8. django_day08_项目相关

    django_day08_项目相关 定义数据库表 from django.db import models # Create your models here. class User(models.M ...

  9. rh358 004 bind反向,转发,主从,各种资源记录 unbound ansible部署bind unbound

    通过bind实现正向,反向,转发,主从,各种资源记录 7> 部署反向解析 从ip解析到fqdn vim /etc/named.conf zone "250.25.172.in-addr ...

  10. OKR之剑(理念篇)01—— OKR带给我们的改变

    作者:vivo互联网平台产品研发团队 一.前言 OKR即目标与关键成果法,起源于英特尔,在谷歌发扬光大.近几年在国内比较火,很多企业都相继引入了OKR的管理方式,小到2-3人的小微初创公司,大到十几万 ...