Oracle基础【5-Oracle中的PL/SQL编程】

在这里插入图片描述

在这里插入图片描述

🌈个人主页:godspeed_lucip
🔥 系列专栏:Oracle从基础到进阶

本文对应Oracle实验报告源文件下载:公众号程序员刘同学回复oracle实验获取下载链接



实验5:Oracle中的PL/SQL编程

一、实验目的

1 熟悉PL/SQL的数据类型和书写规则

2 熟悉控制结构和游标的使用

3 编写和运行函数、过程和触发器

二、实验环境

Oracle 11g

三、实验内容

1 PL/SQL1

在SQL*Plus中编写一个PL/SQL块,功能用于打印学生信息。要求写成一个完成的程序,下面是分别提出程序内要实现的具体要求。

(1)在DECLARE部分完成:

① 建立学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。均为可变长字符类型

② 定义学生信息记录变量stu_record

③ 编写本地子过程:学生信息打印过程PrintStuRecord,把(1)中定义的记录类型作为参数,注意这个过程是带参数的。

(2)在BEGIN…END部分完成:

①为stu_record变量的各个元素赋值如下:

学号:‘2001001’

姓名:’李新’

性别:‘m’

籍贯:‘黑龙江省哈尔滨市’

学习成绩:‘Excellent’

活动成绩:‘Good’

②对该变量的调用打印过程,输出到屏幕

代码如下:

set serverout on
declare
	type stu_record_type is record(
    	stu_name varchar2(20),
        stu_id  varchar2(20),
        stu_sex  varchar2(20),
        stu_home varchar2(50),
        stu_study_score varchar2(20),
        stu_activity_score varchar2(20)
    );
    
    stu_record stu_record_type;
    
    procedure PrintStuRecord(test_stu in stu_record_type) as
    begin
    	dbms_output.put_line('这名学生的学号为:' || test_stu.stu_id);
    	dbms_output.put_line('这名学生的姓名为:' || test_stu.stu_name);
    	dbms_output.put_line('这名学生的性别为:' || test_stu.stu_sex);
    	dbms_output.put_line('这名学生的籍贯为:' || test_stu.stu_home);
    	dbms_output.put_line('这名学生的学习成绩为:' || test_stu.stu_study_score);
    	dbms_output.put_line('这名学生的活动成绩为:' || test_stu.stu_activity_score);
    end PrintStuRecord;
    
begin
	stu_record.stu_id := '2001001';
	stu_record.stu_name := '李新';
	stu_record.stu_sex := 'm';
	stu_record.stu_home := '黑龙江齐齐哈尔市';
	stu_record.stu_study_score := 'Excellent';
	stu_record.stu_activity_score := 'Good';
	PrintStuRecord(stu_record);
end ;

运行效果如图所示。

img

2 PL/SQL2

建立对bookinfo表的DML触发器,一旦bookinfo表发生了任何变化,立即触发,对bookinfo表的数据进行统计,结果存储在数据统计表中

(1)在Scott用户下建立bookinfo表。代码如下所示。

create table bookinfo(
    bookno  varchar2(36) Primary key,
    bookname  varchar2(40) not null,
    authorname  varchar2(10) not null,
    publishtime  date,
    bookprice  float
)

(2)建立数据统计表major_stats,包含两个字段:书的总数和作者的总数。代码如下。

create table major_stats(
    number_books int,
    number_writters int
)

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

create or replace trigger UpdateMajorStats
    after update or delete or insert
    on bookinfo
    begin
        delete from major_stats;
        insert into major_stats(number_books,number_writters)
        select count(bookno),count(distinct authorname)
        from bookinfo;
    end UpdateMajorStats;

创建成功:

img

(4)在bookinfo表中插入、删除和更新信息,再查看major_stats表中数据的变化

① 当初始时bookinfo中没有数据,效果如图所示。

img

② 向bookinfo中插入数据,效果如图所示。

文本  描述已自动生成

③ 从bookinfo中删除一条数据,效果如图所示。

图形用户界面, 文本, 应用程序, Word  描述已自动生成

四、实验体会

1 Oracle中存储过程等有许多特点,即使我们之前有SQL的触发器、存储过程编程经验,但是第一次上手PL/SQL编程时难免会感觉有点困难。记得认真查阅资料。

2 对PL/SQL的数据类型和书写规则更为熟悉。

总结

神谕之光照亮时光河, Oracle智慧如流水悠然。

代码之舞奏响天籁歌, 预言者的眼眸闪烁着星辰。

数据的花园,芬芳绽放, 算法的交响,梦幻飘荡。

数据库的宝匣珍藏智慧, 编码的诗篇激荡心房。

奇迹的编织,Oracle的织女, 信息的纱巾,飘扬在时光。

智者的导航, Oracle,诗意的编码航船。

渴望挑战oracle的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多oracle的奇迹吧。我们推出了引领趋势的💻oracle专栏:【Oracle从基础到进阶】 ,旨在深度探索Oracle的实际应用和创新。🌐🔍

在这里插入图片描述

在这里插入图片描述

  • 13
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
PL/SQL编程 pl/sql(procedural language/sql)是Oracle在标准的sql语言上的扩展。pl/sql不仅允许嵌入式sql语言,还可以定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误。这样使得他的功能变的更强大。缺点是移植性不好。 编一个存储过程,向表添加数据。 1. create table mytest (name varchar2(30),passwd varchar2(30)); 2. create or replace procedure xxc_pro1 is begin insert into mytest values ('小红','m123'); end; 3. 调用过程 exec 过程名(参数1,参数2…)或call 过程名参数1,参数2…) ① exec xxc_pro1; 或者是 ② call xxc_pro1; pl/sql可以做什么? 块:包括过程、函数、触发器、包。 编规范: 1. 注释 --:单行注释 eg:select * from emp where empno=7788;--取得员工信息 /*……*/多行注释 2. 表示符号(变量)的命名规范: ① 当定义变量时,建议用v_作为前缀:v_ename ② 当定义常量时,建议用c_作为前缀:c_rate ③ 当定义游标时,建议用_cursor作为后缀:emp_cursor ④ 当定义例外时,建议用e_作为前缀:e_error 块(block)是pl/sql的今本程序单元,编pl/sql程序实际上就是在编pl/sql块;pl/sql块由三部分组成:定义部分,执行部分,例外处理部分。 declare --可选部分 /*定义部分:定义常量,变量,游标,例外,复杂数据类型*/ begin --必选部分 /*执行部分:要执行的pl/sql语句和sql语句*/ exception --可选部分 /*例外处理部分:处理运行的各种错误*/ 实例1:只包含执行部分的pl/sqlSQL> set serveroutput on --打开输出 SQL> begin 2 dbms_output.put_line('hello'); 3 end; 4 / 说明:dbms_output是oracle提供的包,该包包含一些过程,put_line就是其之一。 实例2:包含定义部分和执行部分 SQL> declare 2 v_ename varchar2(5); 3 begin 4 select ename into v_ename from emp where empno = &no; 5 dbms_output.put_line('雇员名'||v_ename); 6 end; 7 / 说明:&:从控制台输入变量,会弹出一个对话框。 实例3.同时输出雇员名和工资 SQL> declare 2 v_ename varchar2(20); 3 v_sal number(10,2); 4 begin 5 select ename,sal into v_ename,v_sal from emp where empno=&no; 6 dbms_output.put_line('雇员名:'||v_ename||' 工资:'||v_sal); 7 end; 8 / 包含定义,执行,和例外处理的pl/sql块。 实例4.当输入的员工号不存在时 SQL> declare 2 v_ename varchar2(20); 3 v_sal number(10,2); 4 begin 5 select ename,sal into v_ename,v_sal from emp where empno =&no; 6 dbms_output.put_line('雇员名:'||v_ename||' 工资:'||v_sal); 7 exception --异常处理部分 8 when no_data_found then 9 dbms_output.put_line('请输入正确的员工号!'); 10 end; 11 / 以上为块的基础,下面来介绍块的各个组成:过程,函数,触发器,包。 过程 过程用于执行特定的操作,当执行过程的时候,可以指定输入参数(in),也可以指定输出参数(out)。通过在过程使用输入参数,可以讲数据输入到执行部分,通过使用输出参数,可以将执行部分的数据输出到应用环境,在pl/sql可以使用create procedure命令来创建过程。 编一个存储过程,可以输入雇员名和新工资来改变员工工资。 --案例 create or replace procedure xxc_pro3(newname in varchar2,newsal in number) is begin update emp set sal=newsal where ename=newname; end;
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值