PL SQL结构化编程

news2024/11/24 12:03:59

第一章、存储过程

1.1、概念

存储过程是一个命名的程序块,包括过程的名称、过程使用的参数,以及过程执行的操作。

(类似于java中的一种函数,但是存在区别)

可以指定输入参数,和输出参数。

1.2、创建存储过程

CREATE OR REPLACE PROCEDURE SP_MYEMP(PI_DEPTNO     IN NUMBER,
                                     PO_HIREDATE   OUT DATE,
                                     PIO_JOB_ENAME IN OUT VARCHAR) AS
  V_SAL NUMBER;
BEGIN
  SELECT E.NAME, E.SAL, E.HIREDATE
    INTO PIO_JOB_ENAME,V_SAL, PO_HIREDATE
    FROM EMP E
   WHERE E.DEPTNO = PI_DEPTNO
     AND E.JOB = PIO_JOB_ENAME;
  DBMS_OUTPUT.PUT_LINE(PIO_JOB_ENAME || ' ' || V_SAL || ' ' || PO_HIREDATE);
END;

这个是一个存储过程创建的例子,这个存储过程有三个参数,第一个是入参,第二个出参,第三个即是入参也是出参。

1.3、存储过程的调用

存储过程的调用方式:

  1. 用execut命令调用

 

  1. PL/SQL程序块内部调用 
    DECLARE
      V_JOB_NAME VARCHAR2(100) :=  'code';
      V_HIREDATE DATE;
    BEGIN
      SP_MYEMP(10, V_HIREDATE, V_JOB_NAME);
    END;
    

 1.4.存储过程的删除

DROP PROCEDURE 过程名;

第二章、函数

2.1、概述

函数式讲一段已经编译好的代码片段封装在数据库中,用于返回特定的数据,在函数头部必须包含return子句,在函数体内必须包含return返回数据。

作用:

  1. 提高执行效率
  2. 提高代码复用性
  3. 同时函数包含系统函数和自定义函数

2.2、自定义函数的创建

 

--创建无参函数,返回当前时间
CREATE OR REPLACE FUNCTION CUR_DATETIME RETURN VARCHAR2 IS
BEGIN
  RETURN TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS');
END;
CREATE OR REPLACE FUNCTION GET_SAL(NAME VARCHAR2) RETURN NUMBER AS
  V_SAL EMP.SAL%TYPE;
BEGIN
  SELECT SAL INTO V_SAL FROM EMP WHERE UPPER(ENAME) = UPPER(NAME);
  RETURN V_SAL;
END;
/

SELECT get_sal('SMITH') FROM dual;

2.3、存储过程与函数的区别

  1. 返回值区别:函数又一个返回值,而存储过程是通过参数返回的,可以有零个或者多个。
  2. 调用区别:函数可以在查询语句中直接调用,而存储过程必须单独调用
  3. 作用:函数一般用于计算并返回一个计算机结果,而存储过程一般用于完成特定的操作。

第三章、触发器

 3.1、概念

触发器是一个与表相关的。存储的PL/SQL程序,当一个特定的数据操作语句,在指定的表上操作,那么oracle会自动执行触发器中定义的语句,触发器由触发事件,触发条件,触发操作散步分构成。

行级触发器:一条sql语句,影响了多少行记录,就会执行多少次触发器。

语句级触发器,一条sql语句,无论影响了多少行记录都只触发一次;

3.2、创建触发器

整个触发器表明在这个表插入一条数据之后执行里面的代码块,这里没有执行是否为行级触发器,默认为语句及触发器。

注意:在触发器使用的过程中避免对同一个表设置多个触发器,且另外的触发器产生问题。

--语句级触发器
CREATE OR REPLACE TRIGGER TRI_INSERT
  AFTER INSERT ON EMP
DECLARE
BEGIN
  DBMS_OUTPUT.PUT_LINE('有数据插入了');
END;
--行级触发器
CREATE OR REPLACE TRIGGER TRI_TEST4
  BEFORE UPDATE ON EMP
  FOR EACH ROW
DECLARE
BEGIN
  DBMS_OUTPUT.PUT_LINE('修改的薪资前后为:' || :OLD.SAL || '新的为' || :NEW.SAL);
END;
    

第四章、包

4.1、概念

包就是在逻辑上把相关的存储过程、函数、变量、常量和游标等PL/SQL程序组合在一起,并赋予一定的管理功能的程序块。

包的组成:

包定义(包头):声明包内的数据类型、变量、常量、游标、子程序和函数等元素

包体:定义了包定义部分的具体实现

4.2、创建包头、包体

 

 创建一个包,其中包含包头和包体两个部分,这个包中包含一个存储过程和自定义函数。在包头中需要声明两个东西。然后在包体中需要具体到每个业务实现过程。

CREATE OR REPLACE PACKAGE MYPACKAGE IS
  A NUMBER;
  PROCEDURE MY_SP(P_A IN NUMBER);
  FUNCTION MY_FUN(A_A NUMBER) RETURN NUMBER;
END;

CREATE OR REPLACE PACKAGE BODY MYPACKAGE IS
PROCEDURE MY_SP(P_A IN NUMBER) IS
BEGIN
--过程
END MY_SP;

FUNCTION MY_FUN(F_A NUMBER) RETURN NUMBER IS
BEGIN
--函数体
END MY_FUN;
END MYPACKAGE;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/685264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch 地理空间计算

地理位1置搜索:使用查询API进行搜索 1、Geo Distance Query Geo Distance Query是在给定的距离范围内搜索数据的查询。例如,可以搜索给定地理位置附近指定距离内的所有文档。 GET /my_index/_search {"query": {"bool" : {"fi…

基于Python+Django+mysql+html图书管理系统V2.0

基于PythonDjangomysqlhtml图书管理系统V2.0 一、系统介绍二、功能展示1.图书查询2.图书添加3.图书修改4.图书删除5.数据库 三、其它系统四、获取源码 一、系统介绍 该系统实现了图书查询、图书添加,图书修改、图书删除 运行环境:python3.7/mysql5.7以…

STM32单片机(八)DMA直接存储器存取----第二节:DMA直接存储器存取练习1(DMA数据转运)

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

TiDB 7.1资源管控和Oceanbase 4.0多租户使用对比

作者: seiang 原文来源: https://tidb.net/blog/a33d3498 一、背景 TiDB和Oceanbase都是非常优秀的国产分布式数据库;公司从2021年第一套生产业务的TiDB集群落地,随着第一套TiDB生产集群的落地,主要面向不同的业务…

[230607] 阅读TPO69汇总|9:00-10:00

目录 TPO6601 5 事实信息题 7 推理题 9 句子插入题 10 小结题 TPO6602 5 修辞目的题 7 词汇题 tame 10 小结题 TPO6603 TPO6601 5 事实信息题 做题技巧:实词对应 定位在(1)spread the tines of their tongue apart when they ret…

Greenplum数据库优化器——新Path类型CdbMotionPath

Path表示了一种可能的计算路径(比如顺序扫描或哈希关联),更复杂的路径会继承Path结构体并记录更多信息以用于优化。Greenplum为Path结构体(src/include/nodes/relation.h/Path)新加CdbPathLocus locus字段,用于表示结果元组在当前…

ConstraintLayout使用指南

ConstraintLayout ConstraintLayout 可让您使用扁平视图层次结构(无嵌套视图组)创建复杂的大型布局。它与 RelativeLayout 相似,其中所有的视图均根据同级视图与父布局之间的关系进行布局,但其灵活性要高于 RelativeLayout&#x…

【读书笔记】《软件工程导论》

目录 一、软件工程概述 二、启动阶段 三、计划阶段 四、实施阶段 五、收尾阶段 一、软件工程概述 软件危机:在计算机软件的开发和维护过程中遇到的一系列严重问题。 软件危机的产生与自身的特点有关,还与软件开发、管理的方法不正确有关。 软件危…

ELK 多用户登录

先搭建ELK集群环境 请移步至:FilebeatELK 搭建日志收集平台 ES开启TLS加密通信与身份认证 进入ES集群任意一台安装目录,生成ca证书 这里最好使用ES启动账号操作,证书生成过程中一直回车到完成,不要去输入密码。 # 生成CA证书 bi…

UNIX网络编程卷一 学习笔记 第二十一章 多播

单播地址标识单个IP接口,广播地址标识某个子网的所有IP接口,而多播地址标识一组IP接口。单播和广播是寻址方案的两个极端(要么单个要么全部),多播则意在两者之间提供一种折衷方案。多播数据报只应由对它感兴趣的接口接…

【软考网络管理员】2023年软考网管初级常见知识考点(8)-广域网技术

涉及知识点 广域网交换方式,广域网流量控制,广域网链路层协议,广域网传输标准,软考网络管理员常考知识点,软考网络管理员网络安全,网络管理员考点汇总。 原创于:CSDN博主-《拄杖盲学轻声码》&a…

MATLAB——Matlab R2018b软件安装教程

Matlab R2018b软件安装教程 1.选中【Matlab R2018b】压缩包,鼠标右击选择【解压到Matlab R2018b】。 2.双击打开【Matlab R2018b】文件夹。 3.双击打开【R2018b_win64】文件夹。 4.选中【setup】可执行文件,鼠标右击选择【以管理员身份运行】。 5.选择【…

AQS源码分析——以ReentrantLock为例

AQS自身属性: private transient volatile Node head; private transient volatile Node tail; private volatile int state; Node属性: // 共享 static final Node SHARED new Node(); // 独占 static final Node EXCLUSIVE null; // 线程被…

360手机黑科技“位置穿越”功能修复 360手机位置穿越不能用了 360手机刷机

360手机黑科技“位置穿越”功能修复 360手机位置穿越不能用了 360手机刷机 参考:360手机-360刷机360刷机包twrp、root 360刷机包360手机刷机:360rom.github.io 【前言】 360手机,内置的黑科技“位置穿越”,引用高德地图&#xff…

基于NSGA-II算法的多目标多旅行商问题建模求解

基于NSGA-II算法的多目标多旅行商问题建模求解 1引言2多目标多旅行商问题3多目标遗传算法NSGA-II3.1 编码3.2选择(锦标赛选择)3.3 交叉(顺序交叉)3.4 变异3.5快速非支配排序3.5.1符号说明3.5.2快速非支配排序[^7][^6]3.5.3快速非支…

C语言王国探险记之变量的前世今生

王国探险记系列 文章目录(2) 前言 一、变量是什么? 二、变量如何定义? 注意:当你赋值小数的时候,编译器会自然认为你是一个double类型的,所以你在使用float类型的时候要在小数后面加个f&…

Go语言基础:基本数据类型

一、整型 1. 整型分类 整型分为以下两个大类: (1)按长度分为:int8、int16、int32、int64 (2)对应的无符号整型:uint8、uint16、uint32、uint64 其中,uint8就是我们熟知的byte型&…

关于spring mvc 的ViewResolver的问题

今天在一个项目使用springboot的spring mvc的时候遇到了一个问题:在controller中使用返回字符串redirect:/xxxx/xxx进行重定向失败,出现了无法解析redirect:/xxxx/xxx。 找了半天才发现视图解析器ViewResolver中没有添加InternalResourceViewResolver 项…

微服务(总): eureka与nacos的区别及心跳配置修改

目录 简介: 1. nacos与eureka的区别 1.0 功能方面 1.1 连接方式不同 1.2 服务异常后多久剔除 1.2.1 eureka介绍: 1.2.2 nacos介绍: 1.3 操作的方式 1.3.1 nacos 专门的可视化界面(如图) 1.3.2 eureka 比较简约(如图) 1.4 保护机制介绍 1.4.1 CAP原则简介:(取自百…

Redis入门(5)-set

Redis中set的元素具有无序性与不可重复性 1.sadd key member[member] 添加元素,若元素存在返回0若不存在则添加 sadd DB mysql oracle sadd DB mysql sadd DB db22.smembers key 查看set中所有元素 smembers DB3.sismember key member 判断元素在set中是否存…