PL SQL结构化编程

news/2024/7/5 3:37:48

第一章、存储过程

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://lihuaxi.xjx100.cn/news/1274999.html

相关文章

[Web程序设计]实验:会话技术应用

一、实验目的 (1)掌握Cookie和session两种会话跟踪技术和它们的应用和区别。 (2)掌握Cookie和session两种会话的应用和区别。 二、实验内容 (1)请设计一个类,使用Cookie技术实现显示用户上次…

Linux最全常用命令

1、Linux背景: Linux是一种开源的类Unix操作系统,最初由Linus Torvalds在1991年开发,并且得到了全球开发者的广泛参与。它以其稳定性、安全性和灵活性而闻名,并被广泛用于服务器环境和嵌入式设备。 文件和目录操作: l…

云数据库是未来趋势,亚马逊云科技位居Gartner报告“领导者”

最近,数据库领域发生了一个大事件,可以称得上是一座里程碑。全球最具权威的IT研究公司Gartner最近发布了一个消息:在2022年的全球DBMS市场份额中,亚马逊云科技的数据库超越微软,登顶第一。 亚马逊云科技、微软、Oracle这三巨头近几年一直排名前三,占据了全球DBMS超过三分之二的…

Java集合之LinkedList详解

Java集合之LinkedList 一、LinkedList类的继承关系1. 基类功能说明1.1. Iterator:提供了一种方便、安全、高效的遍历方式。1.2. Collection:为了使ArrayList具有集合的基本特性和操作。1.3. Queue: LinkedList是一种队列(Queue)数…

make和new的区别

1 概述 在Go语言中,new和make是两个用于创建对象的内建函数,主要用于go语言数据结构的初始化。 2 new 函数 2.1 功能 new 函数用于创建一个指定类型的指针,并将其初始化为零值。它返回指向新分配的内存地址的指针。 2.2 语法 new 函数的…

一文带你学习主流的“加密算法”

博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌ Java知识图谱点击链接:体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收…

HTTP中的API是什么?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言什么是API&#xf…

java学习记录之MySql二

1 mysql回顾 1.1 DDL 数据定义语言:结构  数据库database create database 数据库名称 character set 字符集 [collate 比较]; drop database 数据库名称; alter database 数据库名称 character set 字符集 …;  表 create table 表名(字段描述 , … ); 字段描述…