1、plsql的概念

PL/SQL(Procedural Language/SQL)是一种过程化语言,属于第三代语言,它与C、C++、Java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑。它允许SQL的数据操纵语言和查询语句包含在块结构(block_structured)和代码过程语言中,使PL/SQL成为一个功能强大的事务处理语言。

2、plsql的分类

  • 无名块或匿名块(anonymous):动态构造,只能执行一次,可调用其它程序,但不能被其它程序调用。
  • 命名块(named):是带有名称的匿名块,这个名称就是标签。
  • 子程序(subprogram):存储在数据库中的存储过程、函数等。当在数据库上建立好后可在其它程序中调用它们。

存储过程

存储过程(Stored Procedure)是在大型数据库系统中, 一组为了完成特定功能的SQL 语句集,存储在数据库中, 经过第一次编译后再次调用不需要再次编译,用户通过 指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

触发器

  •  触发器 (Trigger):当数据库发生操作时,会触发一 些事件,从而自动执行相应的程序。

程序包

  • 程序包(package):存储在数据库中的一组子程序、 变量定义。在包中的子程序可以被其它程序包或子程序调用。

3、plsql的规范

标识符

  • 标识符名不能超过30字符;
  • 一个字符必须为字母;
  • 不区分大小写;
  • 不能用’-‘(减号);
  • 不能是SQL保留字。

4、plsql的操作

4.1 块操作

格式:

DECLARE           ---用来定义变量
V_ename varchar2(20) := 'SMITH';
BEGIN             ----用于执行sql语句
update my_emp set sal =1000 where ename = V_ename;
delete from my_emp where job= 'PRESIDENT' ;
COMMIT;
END;           ----结束PL/SQL块
/                     -------/执行PL/SQL块

例子:有两张表(课程和选课记录表),要求删除课程和对应课程记录

级联删除课程,要求删除课程后,将本门课程的选课记录也要
删除,并在控制台输出通知。
declare 
v_cid_old NUMBER(10):=101;
begin
delete from cselect where cid=v_cid_old;
update course set cid_flag=0 where cid=v_cid_old;
delete from course where cid=v_cid_old;
commit;
DBMS_OUTPUT.PUT_LINE('已成功'||v_cid_old||'课程删除');
end;
/

4.2 存储过程

(注:在这个基础上是触发器,函数,程序包)

格式:

create or replace procedure 过程名

(过程参数1 类型(长度) .........过程参数n)

 is

变量定义

 begin sql语句

 end;/

调用:

  • exec add_my_dept(14, 'NNN' , 'NNN')
  • call add_my_dept(17, 'NNN2' , 'NNN2')
例子:有两张表(课程和选课记录表),要求删除课程和对应课程记录
存储,级联删除课程,要求删除课程后,将本门课程的选课记录也要
删除,并在控制台输出通知。create or replace procedure
pro_cs(cid_old number)
is
begin
delete from cselect where cid=cid_old;
update course set cid_flag=0 where cid=cid_old;
delete from course where cid=cid_old;
commit;
DBMS_OUTPUT.PUT_LINE('已成功'||cid_old||'课程删除');
end;
/

4.3 函数

格式:

create or replace function 函数名

(过程参数1 类型(长度) .........过程参数n)

 is

变量定义

 begin sql语句

 end;/

调用:

函数名(表字段名)

例子:有一张emp员工表,输出ename字段的数据,并将每一行输出的结果才str*str格式

--自定义函数(输出名字的时候,中间用星号表示)create or replace function strx(str in varchar2)
return varchar2
is
ret varchar2(20);
beginret:=SUBSTR(str,1, 1) || RPAD('*', LENGTH(str)-2, '*') || substr(str,-1,1);dbms_output.put_line(ret);
return ret;
end;
/
--调用
select strx(ename) from emp;

4.4 调度器

格式:

--创建触发器
CREATE OR REPLACE TRIGGER backup_dept
before delete---指定执行的时机(指定在删除操作前)
 on scott.my_dept ----指定触发器的目标表
for each row ----执行操作的粒度
WHEN (old.deptno = 40)----触发条件
BEGIN----触发器的正文
-----一旦执行my_dept表的删除操作,就将删除前的值做个备份
insert into dept_backups
values(:old.deptno,:old.dname,:old.loc,sysdate);
END;
/
分类:


dml触发器例子:emp表删除的数据,保存在backup_emp中

create table backup_emp as select * from emp  where 1=2;
删除的数据,保存在backup_emp中
create or replace trigger backup_emp
before delete
on O3.emp
for each row
begininsert into backup_emp(deptno,ename,job,mgr,HIREDATE)values(:old.deptno,:old.ENAME,:old.job,:old.mgr,sysdate); 
end;
/ 

系统触发器 例子:登入数据库的用户信息

--系统触发器
创建备份表
create table log_event
(username varchar2(10),address varchar2(20),logon_date timestamp,logoff_date timestamp
);创建登入触发器
create or replace trigger tr_logon
after logon on database
begininsert into log_event(username,address,logon_date)values (ora_login_user,ora_client_ip_address,systimestamp);
end;
/

视图触发器  例子:创建一张emp员工表和dept部门表的视图,创建一个视图触发器可以实现修改复杂视图

一般是使用在多表的复杂视图,修改表数据创建一个多表视图

--视图触发器create view view_emp_dept as(
select d.deptno,d.dname,e.empno,e.ename  
from dept d,emp e 
where d.deptno=e.deptno
);创建视图触发器
create or replace trigger tr_view
instead of insert on view_emp_dept
for each row
begininsert into emp(empno,ename,deptno) values(:new.empno,:new.ename,:new.deptno);
end;
/

4.5 程序包

用来存放同类型并管理procedure,function,变量的定义等, 相当于java的包。
用法:
1. 创建包规范
sql
CREATE OR REPLACE PACKAGE package_name
AS-- 公共变量、常量声明-- 存储过程声明PROCEDURE procedure_name(parameters);-- 函数声明FUNCTION function_name(parameters) RETURN datatype;
END package_name;
2. 创建包体
sql
CREATE OR REPLACE PACKAGE BODY package_name
AS-- 私有变量、常量声明-- 存储过程实现PROCEDURE procedure_name(parameters) ISBEGIN-- 实现代码END procedure_name;-- 函数实现FUNCTION function_name(parameters) RETURN datatype ISBEGIN-- 实现代码END function_name;END package_name;
例子:使用Oracle程序包封装部门表的增删操作
 
1. 建包引用
create or replace package my_package
as
procedure add_my_dept2(V_deptno
number,V_dname varchar2,V_loc varchar2);
procedure del_my_dept3(V_deptno number);
end;2. 建包体
create or replace package body my_package
as
procedure add_my_dept2(V_deptno number,V_dname varchar2,V_loc varchar2)
is
begin
insert into my_dept values(V_deptno,V_dname,V_loc);
commit;
end add_my_dept2;---结束add_my_dept2procedure del_my_dept3(V_deptno number)
is
begin
delete from my_dept where deptno= V_deptno;
commit;
end del_my_dept3;---结束del_my_dept3
end;
/

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库恢复技术:保障数据安全的关键

文章目录前言数据库恢复技术一、事务的基本概念二、数据库恢复概述三、故障类型与恢复策略1. 故障分类2. 恢复策略与步骤四、恢复实现技术1. 数据转储(备份)2. 日志文件(Logging)3. 检查点技术(Checkpoint)…

C++归并排序

1 算法核心思想归并排序是一种高效的排序方式,需要用到递归来实现,我们先来看一下动图演示:算法核心思想如下:1.将数组尽量平均分成两段。2.将这两段都变得有序(使用递归实现)。3.将两段合并。2 代码实现首…

机器学习算法篇(四)决策树算法

目录 一、决策树概述 1.1 概述 1.2 基本数学原理 二、熵原理形象解读与计算 2.1 熵的概念 2.2 熵的计算示例 2.3 条件熵 三、决策树构造实例 3.1 数据集示例 3.2 计算信息增益 3.3 递归构建决策树 四、信息增益和信息增益率 4.1 信息增益的缺陷 4.2 信息增益率 4…

React 状态管理入门:从 useState 到复杂状态逻辑

作为前端新手,在学习 React 时,useState 往往是我们接触的第一个 Hook。很多人最初会觉得它只能处理简单的计数器之类的状态,但实际上,useState 配合其他 Hook(尤其是 useEffect)可以轻松管理各种复杂状态。…

DirectX 修复工具检测 C++ 异常的七大解决方法

在使用电脑的过程中,尤其是在进行与图形处理、游戏运行或多媒体应用相关的操作时,我们可能会用到 DirectX 修复工具。然而,有时这个工具在运行时会检测到 C 异常,这无疑给我们带来了困扰。那么,当遇到这种情况时&#…

0.2. RAII原则:嵌入式C++的基石 (Resource Acquisition Is Initialization)

在C语言的世界里,我们背负着一项沉重而危险的职责:手动管理所有资源。无论是 malloc 后的 free,fopen 后的 fclose,还是获取互斥锁后的释放,程序员都必须在代码的每一个可能的退出路径上,确保资源被正确释放…

Uniworld-V1、X-Omni论文解读

目录 一、Uniworld-V1 1、概述 2、架构 3、训练过程 4、实验 二、X-Omni 1、概述 2、方法 一、Uniworld-V1 1、概述 动机:当前统一模型虽然可以实现图文理解和文本生成任务,但是难以实现图像感知(检测/分割)与图像操控&am…

安全常见漏洞

一、OWASP Top 101.注入漏洞(1)SQL 注入原理:通过用户输入注入恶意SQL代码示例:sql-- 恶意输入OR 11 -- 可能被注入的SQL SELECT * FROM users WHERE username OR 11 AND password (2)防护措施:使用参数化查询使用ORM框架实施最小权限原则…

管网遥测终端机——管网安全与效率的守护者

管网遥测终端机是一款智能化的管网监测与管理设备,它采用先进的物联网技术和自动化控制技术,能够全天候不间断地对管网系统进行实时监测。该设备通过集成高精度传感器、稳定可靠的通信模块和强大的数据处理单元,构建了一套完整的管网运行数据…

AIIData商业版v1.4.1版本发布会

🔥🔥 AllData大数据产品是可定义数据中台,以数据平台为底座,以数据中台为桥梁,以机器学习平台为中层框架,以大模型应用为上游产品,提供全链路数字化解决方案。 ✨杭州奥零数据科技官网&#xff…

【Layui】调整 Layui 整体样式大小的方法

Layui 的默认样式确实偏大,但你可以通过以下几种方法来调整整体大小: 使用缩放方法(最简单) 在 HTML 的 中添加以下 CSS: <style> html {font-size: 14px; /* 调整基础字体大小 */transform: scale(

MySQL连接数调优实战:查看与配置

MySQL HikariCP 连接数调优实战&#xff1a;如何查看用量 & 合理配置 max_connections 在做 Java 后端开发时&#xff0c;我们经常会遇到 MySQL 连接数配置问题&#xff0c;比如&#xff1a; max_connections 配多少合适&#xff1f;HikariCP 的 maximum-pool-size 要不要…

周志华院士西瓜书实战(一)线性规划+多项式回归+逻辑回归+决策树

目录 1. 线性规划 2. 多项式回归 3. 逻辑回归手写数字 4. Pytorch MNIST 5. 决策树 1. 线性规划 先生成 Y1.5X0.2ε 的&#xff08;X,Y&#xff09;训练数据 两个长度为30 import numpy as np import matplotlib.pyplot as plt def true_fun(X): # 这是我们设定的真实…

端到端供应链优化案例研究:需求预测 + 库存优化(十二)

本篇文章聚焦于供应链中的库存优化&#xff0c;技术亮点在于通过机器学习改进预测精度&#xff0c;成功将预测误差降低25%&#xff0c;并在六个月内实现库存过剩减少40%。该方法适用于需要优化库存和提升服务水平的商业场景&#xff0c;特别是制药行业&#xff0c;帮助企业在降…

Harbor 企业级实战:单机快速上手 × 高可用架构搭建 × HTTPS安全加固

文章目录一、建立项目二、命令行登录harbor&#xff08;配置在客户端即可&#xff09;三、给本地镜像打标签并上传到harbor四、下载harbor的镜像五、创建自动打标签上传镜像脚本六、修改harbor配置七、实现harbor高可用7.1 安装第二台harbor主机7.2 新建目标&#xff0c;输入第…

进程管理、系统高负载、cpu超过800%等实战问题处理

进程管理与高负载实战&#xff1a;CPU 飙到 800% 时的分析与处理 在生产环境中&#xff0c;系统高负载和 CPU 异常占用是运维工程师最常面对的场景之一。 这篇文章将从进程管理基础讲起&#xff0c;到高负载问题定位&#xff0c;再到CPU 占用 800% 的实战处理&#xff0c;帮助你…

控制建模matlab练习12:线性状态反馈控制器-①系统建模

此练习&#xff0c;主要是使用状态空间方程来设计控制器的方法和思路&#xff1a; ①系统建模&#xff1b; ②系统的能控性&#xff1b; ③极点配置&#xff1b; ④最优化控制LQR&#xff1b; ⑤轨迹追踪&#xff1b; 以下是&#xff0c;第①部分&#xff1a;系统建模&#xff…

bytearray和bytes

bytearray和bytes不一样的地方在于&#xff0c;bytearray是可变的。 str 人生苦短&#xff0c;我用Python! bytes bytearray(str.encode()) bytes bytearray(b\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!) str bytes.d…

护网行动之后:容器安全如何升级?微隔离打造内网“微堡垒”

护网行动刚刚落下帷幕&#xff0c;但这场没有硝烟的攻防演练&#xff0c;留给安全行业的思考却从未停止。当“横向移动”成为攻击方屡试不爽的杀手锏时&#xff0c;一个过去可能被忽视的角落——容器网络安全&#xff0c;在本届护网中被推到了前所未有的高度。面对云原生时代容…

一动鼠标就锁屏,设备活动监控方案的技术实现与应用

摘要&#xff1a;本文探讨基于本地化监控机制实现设备操作追踪的技术方案&#xff0c;重点解析其触发逻辑与隐私保护机制。方案适用于需要监控设备使用场景的技术人员。一、核心功能实现原理触发监控机制键盘钩子&#xff1a;通过系统级键盘事件监听&#xff08;AltL组合键激活…