【Oracle】实验五 PL_SQL编程

news2024/9/21 20:54:10

【实验目的】

  1. 熟悉PL/SQL的数据类型和书写规则
  2. 熟悉控制结构和游标的使用
  3. 编写和运行函数、过程和触发器

【实验内容】

编写脚本文件,调试运行脚本文件,并记录结果。

  1. 本地子程序的编写及调试

1、编写一个PL/SQL块,功能用于打印学生信息。整个程序的具体要求如下:

  • 在DECLARE部分完成:
  1. 自定义学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。每个元素均为可变长字符类型
  2. 定义学生信息记录变量stu_record
  3. 编写带一个形参的本地过程:学生信息打印过程PrintStuRecord(x stu_record_type),把形参x定义为(1)中记录类型。这个过程的代码用于实现将形参x的每个元素打印输出(提示:用dbms_output.put_line过程)。
  • 在BEGIN…END部分完成:
  1. 为stu_record变量的各个元素赋值如下:

学号:‘2001001’
姓名:’李新’
性别:‘m’
籍贯:‘黑龙江省哈尔滨市’
学习成绩:‘Excellent’
活动成绩:‘Good’

  1. 调用本地过程,用stu_record变量作为实参

2、运行这个PL/SQL程序,查看并记录运行结果

  1. 函数的编写及调试
  2. 编写一个函数f_pjgz,有一个数值型参数v_deptno,根据函数调用时输入部门号,来查询scott用户下emp表中该部门所有员工的平均工资,这个平均工资作为函数的返回值。
  3. 用select语句调用该函数,用来查询部门号为10的员工平均工资
  4. 触发器程序的编写及调试
  5. 建立对bookinfo表的DML触发器,一旦bookinfo表发生了任何变化,立即触发,对bookinfo表的数据进行统计,结果存储在数据统计表中
  6. 如果没有则建立bookinfo表,选择建立在scott用户下,表结构为(bookno varchar2(36) Primary key,

bookname varchar2(40) not null,
authorname varchar2(10) not null,
publishtime date,
bookprice float)

  1. 建立数据统计表major_stats,包含两个字段:书的总数和作者的总数
  2. 创建触发器UpdateMajorStats,完成在bookinfo表中插入、删除和修改记录之后,对bookinfo表进行统计,结果存储在(2)建立的major_stats表中
  3. 在bookinfo表中分别进行插入、删除和更新操作,每种操作执行后再查看bookinfo表和major_stats表中数据的变化

【实验记录】

编写脚本文件,调试运行脚本文件,并记录结果。

  1. 本地子程序的编写及调试

1、编写一个PL/SQL块,功能用于打印学生信息。整个程序的具体要求如下:

  • 在DECLARE部分完成:
  1. 自定义学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。每个元素均为可变长字符类型
  2. 定义学生信息记录变量stu_record
  3. 编写带一个形参的本地过程:学生信息打印过程PrintStuRecord(x stu_record_type),把形参x定义为(1)中记录类型。这个过程的代码用于实现将形参x的每个元素打印输出(提示:用dbms_output.put_line过程)。
  • 在BEGIN…END部分完成:
  1. 为stu_record变量的各个元素赋值如下:

学号:‘2001001’
姓名:’李新’
性别:‘m’
籍贯:‘黑龙江省哈尔滨市’
学习成绩:‘Excellent’
活动成绩:‘Good’

  1. 调用本地过程,用stu_record变量作为实参

登录SCOTT用户


在桌面创建5_1.sql,用记事本打开,写入代码,完整代码及注释见下图

运行此程序

发现有乱码问题,排查后发现是字符编码错误地设置成了UTF-8,更改这个文件的字符编码为ANSI。同时错误信息“未知的SET选项‘;’”是因为在set serveroutput on后错误地添加了分号,将其删去。


2、运行这个PL/SQL程序,查看并记录运行结果

成功运行,结果如图所示

  1. 函数的编写及调试
  2. 编写一个函数f_pjgz,有一个数值型参数v_deptno,根据函数调用时输入部门号,来查询scott用户下emp表中该部门所有员工的平均工资,这个平均工资作为函数的返回值。

完整代码如下

  1. 用select语句调用该函数,用来查询部门号为10的员工平均工资

创建函数

调用函数

  1. 触发器程序的编写及调试
  2. 建立对bookinfo表的DML触发器,一旦bookinfo表发生了任何变化,立即触发,对bookinfo表的数据进行统计,结果存储在数据统计表中
  3. 如果没有则建立bookinfo表,选择建立在scott用户下,表结构为(bookno varchar2(36) Primary key,

bookname varchar2(40) not null,
authorname varchar2(10) not null,
publishtime date,
bookprice float)
通过查询bookinfo表来查看是否有bookinfo表

发现没有这个表,所以按题干表结构在scott下建立这个表

  1. 建立数据统计表major_stats,包含两个字段:书的总数和作者的总数

  1. 创建触发器UpdateMajorStats,完成在bookinfo表中插入、删除和修改记录之后,对bookinfo表进行统计,结果存储在(2)建立的major_stats表中

  1. 在bookinfo表中分别进行插入、删除和更新操作,每种操作执行后再查看bookinfo表和major_stats表中数据的变化

插入操作:


删除操作:

更新操作:

【实验小结】

1.在本实验中,我们通过编写了一个用于打印学生信息的PL/SQL程序、编写并调试一个函数、编写并调试一个触发器,熟悉了PL/SQL编程过程和编程语句;
2.在本实验中遇到了两个问题:
①首先是编码方式问题,需要使用ANSI编码;
②其次是编写触发器时遇到了一个“ora-04901: student2,触发器/函数 不可读”问题,排查后发现是因为一开始写触发器用了一个“for each row”,但是我们触发器依附的表是一个动态表,不允许触发器主体对动态表进行查询修改,但这个限制只应用于行级触发器,去掉“for each row”即可完美解决;

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

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

相关文章

【学习css1】flex布局-页面footer部分保持在网页底部

中间内容高度不够屏幕高度撑不开的页面时候&#xff0c;页面footer部分都能保持在网页页脚&#xff08;最底部&#xff09;的方法 1、首先上图看显示效果 2、奉上源码 2.1、html部分 <body><header>头部</header><main>主区域</main><foot…

深入解析香橙派 AIpro开发板:功能、性能与应用场景全面测评

文章目录 引言香橙派AIpro开发板介绍到手第一感觉开发板正面开发板背面 性能性能概况性能体验 应用场景移植操作系统香橙派 AIpro开发板支持哪些操作系统&#xff1f;烧写操作系统到SD卡中启动开发板的步骤查看系统提供的事例程序体验——开发的简洁性 视频播放展示ffmpeg简介f…

【Python3】自动化测试_用Playwright发送API请求

一、创建APIRequestContex实例 # 连接到 APIRequest&#xff0c;可用于 Web API 测试的 API。 myRequest myPlaywright.request# 创建APIRequestContext实例&#xff0c;该实例可用于发送 Web 请求 myRequestContext myRequest.new_context() myRequest.new_context(**kwargs…

【MySQL】8.复合查询

复合查询 一.基本查询回顾(新增子查询)二.多表查询三.自连接四.子查询1.单列单行子查询2.单列多行子查询——三个关键字3.多列子查询4.在 from 子句中使用子查询 五.合并查询六.总结 一.基本查询回顾(新增子查询) //1.查询工资高于500或岗位为MANAGER的雇员&#xff0c;同时还…

js逆向-webpack-python

网站&#xff08;base64&#xff09;&#xff1a;aHR0cHM6Ly93d3cuY29pbmdsYXNzLmNvbS96aA 案例响应解密爬取&#xff08;webpack&#xff09; 1、找到目标url 2、进行入口定位&#xff08;此案例使用 ‘decrypt(’ 关键字搜索 &#xff09; 3、找到位置进行分析 --t 为 dat…

【软件工具】VMware Workstation Pro 15.5安装

1、双击运行安装包程序 2、接受许可证协议 3、选择安装位置&#xff0c;建议非中文无空格&#xff0c;增强型键盘驱动程序可选 4、按照自身使用习惯勾选产品更新和客户体验提升计划 5、快捷方式 6、开始安装 7、稍等会儿(可以玩会儿手机) 8、可输入许可证也可直接完成&#xff…

《ElementUI/Plus 基础知识》el-tree 之修改可拖拽节点的高亮背景和线

前言 收到需求&#xff0c;PM 觉得可拖拽节点的高亮背景和线样式不明显&#xff01;CSS 样式得改&#xff01; 注意&#xff1a;下述方式适用于ElementUI el-tree 和 ElementPlus el-tree&#xff01; 修改 拖拽被叠加节点的背景色和文字 关键类名 is-drop-inner .el-tree…

几何距离与函数距离:解锁数据空间中的奥秘

几何距离&#xff1a;直观的空间度量 几何距离&#xff0c;顾名思义&#xff0c;是我们在几何学中熟悉的距离概念&#xff0c;如欧几里得距离、曼哈顿距离和切比雪夫距离等。这些距离度量直接反映了数据点在多维空间中的位置关系。 欧几里得距离&#xff1a;最为人熟知的几何距…

conda install问题记录

最近想用代码处理sar数据&#xff0c;解放双手。 看重了isce这个处理平台&#xff0c;在安装包的时候遇到了一些问题。 这一步持续了非常久&#xff0c;然后我就果断ctrlc了 后面再次进行尝试&#xff0c;出现一大串报错&#xff0c;不知道是不是依赖项的问题 后面看到说mam…

langchain-runnable底层原理

文章目录 langchainlangchain生态介绍langchainLCELrunnablerunnable基础能力介绍invokebatchstreamainvokeabatchastream__or__、__ror__pipeget_nameInputType (属性)OutputType (属性)input_schema (属性)output_schema (属性) langchain langchain生态介绍 langchain是一个…

Min P Sampling: Balancing Creativity and Coherence at High Temperature阅读笔记

上一篇文章是关于大语言模型的调参数&#xff0c;写了temperature这个参数近期的一个工作。那接下来&#xff0c;就不得不再来讲讲top-p这个参数啦。首先还是上文章&#xff0c;同样是非常新的一个工作&#xff0c;2024年7月1日submit的呢。 文章链接&#xff1a;https://arxi…

NLP任务:情感分析、看图说话

我可不向其他博主那样拖泥带水&#xff0c;我有代码就直接贴在文章里&#xff0c;或者放到gitee供你们参考下载&#xff0c;虽然写的不咋滴&#xff0c;废话少说&#xff0c;上代码。 gitee码云地址&#xff1a; 卢东艺/pytorch_cv_nlp - 码云 - 开源中国 (gitee.com)https:/…

LED显示屏中什么是亮度检测?什么是亮度调节?

在夜幕降临的城市中&#xff0c;一套套璀璨夺目的LED显示屏如同现代生活的万花筒&#xff0c;展示着五彩斑斓的信息世界。从繁华的商业街区到繁忙的交通枢纽&#xff0c;再到家庭影院&#xff0c;LED显示屏以其高亮度、长寿命和灵活性&#xff0c;在数字时代的大潮中迅速崛起&a…

Drv8434s芯片两相步进电机驱动程序+硬件解决方案

一、Drv8434s芯片介绍 PWM 微步进电机驱动器 – 具有 STEP/DIR 引脚的 SPI 接口 – 最高 1/256 的微步进分度器 • 集成电流检测功能 – 无需检测电阻 – 4% 满量程电流精度 • 智能调优、慢速和混合衰减选项 • 工作电源电压范围为 4.5V 至 48V • 低 RDS(ON)&#xff1a;24V…

最小二乘算法的解

最小二乘法&#xff08;Least Squares&#xff09;是一种用于寻找线性回归模型的最佳拟合直线的标准方法。它通过最小化数据点与拟合直线之间的平方差来找到最佳拟合的线性模型。 线性回归模型 假设我们有一组数据点 (xi,yi)&#xff0c;线性回归模型的目标是找到系数 w 和截…

一个很变态但是有用的变现手段:用AI技术搞电商模特图,接单接到手软~

前言 今天带大家拆解一个特别有趣的项目&#xff0c;必须得跟大家分享一下&#xff1a;用AI技术搞电商模特图。 是不是感觉挺科幻的&#xff1f;但这真不是科幻小说里的情节&#xff0c;而是咱们现实生活中已经实现的事情。 想想看&#xff0c;咱们平常在网上看到的那些漂亮…

《数据科学与工程》课程结课报告

目录 作业要求: 一、数据预处理(包括数据扩展、数据过滤、数据加载等) 1.数据查看 2.上传数据 3.查看数据读取情况 4.时间维度的切割 二、单维度数据描述分析 2.1 条数统计 (1)查询数据的总条数 (2)非空查询条数 (3)查询无重复总条数 (4)查询UID唯一的条…

ARM功耗管理之功耗数据与功耗收益评估

安全之安全(security)博客目录导读 思考&#xff1a;功耗数据如何测试&#xff1f;功耗曲线&#xff1f;功耗收益评估&#xff1f; UPF的全称是Unified Power Format&#xff0c;其作用是把功耗设计意图&#xff08;power intent&#xff09;传递给EDA工具&#xff0c; 从而帮…

Vue3 使用 Vue Router 时,prams 传参失效和报错问题

Discarded invalid param(s) “id“, “name“, “age“ when navigating 我尝试使用 prams 传递数据 <script setup> import { useRouter } from vue-routerconst router useRouter() const params { id: 1, name: ly, phone: 13246566476, age: 23 } const toDetail…

XSS: 原理 反射型实例[入门]

原理 服务器未对用户输入进行严格校验&#xff0c;使攻击者将恶意的js代码&#xff0c;拼接到前端代码中&#xff0c;从而实现恶意利用 XSS攻击危害 窃取用户Cookie和其他敏感信息&#xff0c;进行会话劫持或身份冒充后台增删改文章进行XSS钓鱼攻击利用XSS漏洞进行网页代码的…