实验6plsql程序设计
- 格式:doc
- 大小:414.00 KB
- 文档页数:33
西安邮电大学(计算机学院)课内实验报告实验:PL/SQL编程实验课程:大型数据库系统班级:学号:学生姓名:任课教师:一、实验目的(1)了解PL/SQL语言的结构。
(2)了解PL/SQL变量和常量的声明和使用方法。
(3)学习条件语句的使用方法。
(4)学习分支语句的使用方法。
(5)学习循环语句的使用方法。
(6)学习使用Oracle系统函数。
二、实验内容(1)练习条件语句的使用方法。
(2)练习分支语句的使用方法。
(3)练习循环语句的使用方法。
(4)练习使用Oracle系统函数。
三、实验前准备首先要了解PL/SQL语言是结构化程序设计语言。
块(Block)是PL/SQL程序中最基本的结构,所有PL/SQL程序都是由块组成的。
PL/SQL的块由变量声明、程序代码和异常处理代码3部分组成。
在PL/SQL中,常量和变量在使用前必须声明,可以使用DECLARE对变量进行声明。
四、实验步骤1.使用条件语句条件语句格式:IF <条件表达式> THEN<执行语句> …… <执行语句n>[ELSIF <条件表达式> THEN<执行语句> …… <执行语句n>……ELSE<执行语句>]END IF;执行下列程序,观察结果:SET ServerOutput ON;DECLARENum INTEGER := -11;BEGINIF Num < 0 THENdbms_output.put_line('负数');ELSIF Num >0 THENdbms_output.put_line('正数');ELSEdbms_output.put_line('0');END IF;END;2.使用分支语句分支语句格式:CASE <变量>WHEN <表达式1> THEN 值1WHEN <表达式2> THEN 值2……WHEN <表达式n> THEN 值nELSE 值n + 1END;执行下列程序,观察结果:SET ServerOutput ON;DECLAREvarDAY INTEGER := 3;Result VARCHAR2(20);BEGINResult := CASE varDAYWHEN 1 THEN '星期一'WHEN 2 THEN '星期二'WHEN 3 THEN '星期三'WHEN 4 THEN '星期四'WHEN 5 THEN '星期五'WHEN 6 THEN '星期六'WHEN 7 THEN '星期七'ELSE '数据越界'END;dbms_output.put_line(Result);END;3.使用循环语句(1)循环语句格式1:LOOP<程序块1>IF <条件表达式> THENEXITEND IF<程序块2>END LOOP;执行下列程序,观察结果:SET ServerOutput ON;DECLAREv_Num INTEGER := 1;v_Sum INTEGER := 0;BEGINLOOPv_Sum := v_Sum + v_Num;dbms_output.put_line(v_Num);IF v_Num = 3 THENEXIT;END IF;dbms_output.put_line(' + ');v_Num := v_Num + 1;END LOOP;dbms_output.put_line(' = ');dbms_output.put_line(v_Sum);END;(2)循环语句格式2:LOOP<程序块1>EXIT WHEN <条件表达式><程序块2>END LOOP;执行下列程序,观察结果:SET ServerOutput ON;DECLAREv_Num INTEGER := 1;v_Sum INTEGER := 0;BEGINLOOPv_Sum := v_Sum + v_Num;dbms_output.put_line(v_Num);EXIT WHEN v_Num = 3;dbms_output.put_line(' + ');v_Num := v_Num + 1;END LOOP;dbms_output.put_line(' = ');dbms_output.put_line(v_Sum); END;(3)循环语句格式3:WHILE <条件表达式>LOOP<程序块>END LOOP;执行下列程序,观察结果:SET ServerOutput ON;DECLAREv_Num INTEGER := 1;v_Sum INTEGER := 0;BEGINWHILE v_Num <= 3LOOPv_Sum := v_Sum + v_Num;dbms_output.put_line(v_Num);IF v_Num < 3 THENdbms_output.put_line(' + ');END IF;v_Num := v_Num + 1;END LOOP;dbms_output.put_line(' = ');dbms_output.put_line(v_Sum); END;(4)循环语句格式4:FOR <循环变量> IN <初始值> ..<终止值>LOOP<程序块>END LOOP;执行下列程序,观察结果:SET ServerOutput ON;DECLAREv_Num INTEGER;v_Sum INTEGER := 0;BEGINFOR v_Num IN 1..3LOOPv_Sum := v_Sum + v_Num;dbms_output.put_line(v_Num);IF v_Num < 3 THENdbms_output.put_line(' + ');END IF;END LOOP;dbms_output.put_line(' = ');dbms_output.put_line(v_Sum);END;4.使用系统函数常用函数有:数值型函数,字符型函数,日期型函数,统计函数五、实验结果六.评价分析及心得体会通过本次试验我学会了条件语句,分支语句,及循环语句的使用方法。
实验1SQL*Plus的使用和基本SELECT语句实验要求(1)掌握SQL*Plus的基本使用(2)掌握SELECT语句的简单用法。
实验条件自我实践实验时间大约60分钟1.练习1 FOLLOW ME●时间20分钟●实验步骤(1)观看第1章教学视频。
(2)实践视频中的实例。
2.练习2●时间40分钟●实验步骤(1)登录到SQL*Plus,初始用户名为:SCOTT,口令为TIGER。
(2)分别显示EMP、DETP、SALGRADE表结构,并察看表中的数据。
(3)创建一个查询显示每个雇员的姓名、工作、受雇日期及雇员编号,并且要将雇员编号作为第一列显示。
最后将该SQL语句保存成文件p1q1.sql,并执行该脚本文件。
(4)将脚本文件p1q1.sql调取到SQL缓冲区,并将列标题设置为Emp #,Employee,Job及Hire Date,将该SQL语句保存成文件p1q2.sql,最后返回查询结果。
思考练习题1.SQL*Plus命令是用于访问数据库的吗?2.下面的SELECT语句能成功执行吗?SQL>SELECT ename,job,sal Salary2FROM emp;3.下面的语句有3处错误,请纠正它们。
SQL>SELECT empno,ename2Salary x 12 ANNUAL SALARY3FROM emp;4.创建一个查询从EMP表中检索出不重复的工作名称。
5.用一个逗号和一个空格将姓名和工作连接后作为一个整体输出,显示的列标题为Employee and Title。
6.创建一个查询,用逗号将表中所有字段的信息连接作为一个整体输出,输出的列标题为THE_OUTPUT。
实验2使用WHERE和ORDER BY子句实验要求(1)掌握WHERE子句的用法。
(2)掌握ORDER BY子句的用法。
实验条件自我实践实验时间大约60分钟1.练习1FOLLOW ME●时间20分钟●实验步骤(1)观看第2章教学视频。
PL/SQL程序设计PL/SQL是一种数据库编程语言,广泛应用于Oracle数据库管理系统中。
它是SQL的一种扩展,添加了过程性编程的特性,允许开发者创建更复杂、可重用的程序逻辑。
PL/SQL程序设计可以分为以下几个方面:1.PL/SQL的基本概念:PL/SQL是过程性语言和SQL结构的结合。
它使用块的概念,一个块由一个可选的声明部分、一个执行部分和一个可选的异常处理部分组成。
PL/SQL程序可以包含变量、常量、游标和异常处理等元素。
2.变量和数据类型:在PL/SQL中,可以通过声明变量来存储和操作数据。
PL/SQL中支持多种数据类型,包括基本的整型、字符型、日期型等,还可以自定义记录类型和表类型。
使用变量可以在程序中存储临时数据,进行运算和逻辑判断。
3.控制结构:PL/SQL支持多种控制结构,包括条件语句、循环语句和异常处理语句。
条件语句可以根据一些条件来执行不同的操作。
循环语句可以重复执行一段代码,直到满足退出条件为止。
异常处理语句用于捕获和处理运行时错误,保证程序的健壮性。
4.子程序:PL/SQL中的子程序可以是存储过程、函数或触发器。
存储过程是一段可重用的代码块,它可以在数据库中存储和调用。
函数是一个具有返回值的子程序,可以在SQL语句中使用。
触发器是与表相关联的特殊存储过程,当满足特定的条件时自动触发。
5.游标和异常处理:PL/SQL中的游标用于处理查询结果集。
游标可以使用循环语句来遍历结果集,并进行相应的操作。
异常处理是PL/SQL的一大特点,它可以有效地捕获和处理运行时错误。
在异常处理部分,可以指定对应不同类型错误的处理方式,例如日志记录、回滚事务等。
6.包和包体:PL/SQL中的包是一种逻辑上的封装,它可以包含变量、常量、游标和子程序等。
包体是包的实现部分,声明和定义了包中的各个元素。
使用包可以将相关的数据和逻辑组织在一起,提供更好的可维护性和可重用性。
7.异常处理和日志记录:在实际的PL/SQL开发中,异常处理是非常重要的。
《数据库开发技术》课程之实践视图、序列、同义词和索引一、实验目的1.熟练掌握创建、使用、修改、删除和查看视图、序列、同义词和索引的方法。
二、实验内容和要求1. 创建一个部门月薪统计视图,包括所有的部门号,所有的部门名,各部门人数,各部门平均薪水、最高薪水和最低薪水。
DEPTNO DNAME COUNT_NUM AVG_SAL MAX_SAL MIN_SAL---------- -------------- ---------- ---------- ---------- ----------10 ACCOUNTING 5 2710 5000 130020 RESEARCH 5 2175 3000 80030 SALES 6 1566.66667 2850 95040 OPERATIONS 0已选择4行。
create view dept_viewas select dept.deptno DEPTNO,dept.dname DNAME,count(emp.deptno) "COUNT NUM",avg(sal)"A VG SAL" ,max(sal)"MAX SAL ",MIN(sal)"MIN SAL" from emp ,deptwhere emp.deptno(+)=dept.deptnogroup by dept.deptno,dept.dnameorder by dept.deptno;2. 创建一个新的序列empno_seq,序列的步长为1,起始值为7961,最大值为9999,并且不允许序列循环。
用此序列可以向EMP表中插入新雇员。
create sequence empno_seqincrement by 1start with 7961maxvalue 9999nocycleorder;select sequence_name, min_value, max_value, increment_by, last_numberFROM user_sequences;3. 使用empno_seq序列向EMP表添加一新雇员。
数据库原理实验报告
实验名称
使用PL/SQL编写存储过程访问数据库
实验环境
硬件平台:Intel Core i5-3210M
操作系统:Windows 8.1
数据库管理系统(DBMS):MySQL Server 5.5
实验内容及步骤
1.由于我们实验所用的MySQL不支持PL/SQL,但提供了存储过程的功能。
因此我们通过
在MySQL中建立存储过程来完成本实验。
2.建立一个存储过程,用来向student表添加一条学生记录,如图:
在存储过程中,我们将学号,姓名,性别,年龄以及系别作为存储过程的输入参数。
3.在调用存储过程前,我们先查看一下student表:
4.下面,我们调用存储过程,向表中插入一条数据,如下:
5.调用完成后,我们再次查看student表中的内容:
可以看到,刚才调用存储过程向student表中插入的数据已在表中,说明插入成功。
实验4 PL/SQL程序实验一、实验目的理解PL/SQL程序结构,掌握Oracle的PL/SQL程序的编制与调试方法并理解Oracle 数据库中的异常处理。
二、实验要求实验任务1.编制各种控制结构的PL/SQL程序上机调试课堂中所讲述的所有例题按要求编制程序:根据SCOTT用户的emp表中的DEPTNO字段的值,为姓名为FAN的雇员修改工资,若部门号为10,则工资加100元;若部门号为20,则工资加300元,否则工资加400元。
2.编制带有异常处理的PL/SQL程序上机调试课堂中所讲述的所有带有异常处理的PL/SQL程序例题按要求编制程序:对SCOTT用户的EMP表中的每一个雇员按不同情况征收个人所得税。
将各雇员的雇员号(empno)、姓名(ename)及所得税(stax)存放于名为TAX的表中。
如果工资高于4000元,征收20%的税,并触发自定义的异常将该情况说明写入TAX的备注(memo)字段。
否则,均征收10%的税。
三、实验学时安排课堂内2学时完成实验所要求的所有内容。
四、实验内容与步骤1)选择【开始】/【程序】/【Oracle-OraHome92】/【ApplicationDevelopment】/【SQL*Plus】选项,出现SQL*Plus环境的登录界面,在用户名文本框中输入实验3的任务1中创建的用户名,口令文本框中输入实验3的任务1中创建的用户口令,在主机字符串文本框中输入配置好的网络服务名。
如图4-1所示。
图4-1 用创建的用户登录SQL*Plus2)登录到SQL*Plus 环境后,用EDIT 命令后接文件名来调用操作系统的文本编辑器(Windows2000/NT操作系统默认为记事本),如图4-2所示。
图4-2 在SQL*Plus 环境中使用EDIT 命令调用文本编辑器3)在文本编辑器中编写程序源代码,如图4-3所示。
图4-3 在文本编辑器中编写程序源代码4)存盘(文件默认扩展名为.sql,可以修改文件扩展名及保存路径,如果不做更改,默认保存在安装Oracle的路径下的\oracle\ora92\bin目录下)退出返回到SQL*Plus环境,用@或START文件名(如果更改过存放路径,在文件名前要指定存放的路径)执行,如图4-4所示。
PL/SQL程序设计主要内容:PL/SQL 语言的基本特征、PL/SQL程序的结构、PL/SQL语言的控制结构、游标(cursor)编程、错误处理、存储过程和函数、创建包(Package)、触发器(Trigger)。
第一章PL/SQL 语言的基本特征1. 什么是PL/SQL?PL/SQL是Procedure Language & Structured Query Language 的缩写。
SQL SERVER:Transaction-SQL。
PL/SQL 可分为两种:数据库PL/SQL和工具PL/SQL。
两者的编程非常相似。
都具有编程结构、语法和逻辑机制。
主要介绍数据库PL/SQL内容。
工具PL/SQL用于Oracle的客户端开发工具。
工具PL/SQL另外还增加了用于支持工具(如ORACLE Forms)的句法,如:在窗体上设置按钮等。
Oracle的客户端开发工具Oracle iDS(Developer Studio)Release 2 (10.2)包括的软件:Oracle10g JDeveloper -JAVA开发工具Oracle10g Forms Developer -窗体开发Oracle10g Designer -数据库工具Oracle10g Software Configuration Manager -软件配置Oracle10g Reports Developer -报表开发Oracle10g Discoverer AdministratorOracle10g Warehouse Builder -数据仓库Oracle10g Business Intelligence Beans -商业智能2. PL/SQL 语言的特征支持SQL语言、支持面向对象编程、可移植、与Oracle集成。
PL/SQL程序不区分大小写。
字符串数据区分大小写。
3. PL/SQL 可用的SQL语句在PL/SQL中可以使用的SQL语句有:INSERT,UPDATE,DELETE,SELECT INTO,COMMIT,ROLLBACK,SAVEPOINT。
pl sql课程设计一、课程目标知识目标:1. 理解PL/SQL基本概念,掌握其作为Oracle数据库编程语言的特点及应用场景。
2. 学会基本的PL/SQL语法结构,包括变量声明、数据类型、控制结构(IF、LOOP、CASE)和异常处理。
3. 掌握使用PL/SQL编写存储过程、函数和触发器,并能应用于实际数据库设计和维护中。
技能目标:1. 能够运用PL/SQL编写简单的程序,进行基本的数据库操作。
2. 能够独立创建存储过程、函数和触发器,实现对数据库的复杂操作和事务控制。
3. 能够通过调试和优化PL/SQL代码,提高程序的性能和可维护性。
情感态度价值观目标:1. 培养学生对数据库编程的兴趣,激发其探索数据库技术的热情。
2. 培养学生团队协作意识,学会在项目中与他人共同解决问题,共同进步。
3. 培养学生严谨、踏实的编程态度,养成良好的编程习惯和代码规范。
课程性质:本课程为高年级数据库编程课程,以实践为主,理论联系实际,注重培养学生的动手能力和实际应用能力。
学生特点:学生具备一定的数据库基础,了解SQL语言,对编程有一定的兴趣和基础。
教学要求:教师应采用案例教学法,结合实际项目案例进行教学,引导学生主动参与,注重实践操作,提高学生的编程技能和应用能力。
同时,关注学生个体差异,给予个性化指导,确保每位学生都能达到课程目标。
通过课程学习,使学生能够独立完成PL/SQL编程任务,为后续从事数据库相关工作和进一步学习打下坚实基础。
二、教学内容1. PL/SQL基础概念:介绍PL/SQL的特点、作用及其在Oracle数据库中的应用。
- 章节关联:课本第1章“PL/SQL基础”- 内容列举:PL/SQL块结构、变量声明、数据类型、运算符、表达式。
2. 控制结构:讲解如何使用IF、LOOP、CASE等控制结构进行逻辑判断和循环操作。
- 章节关联:课本第2章“控制结构”- 内容列举:条件判断、循环控制、分支选择。
3. 异常处理:学习如何处理程序中可能出现的错误和异常情况。
PL/SQL编程实验报告班级:10网工三班学生姓名:谢昊天学号:1215134046实验目的和要求:(1) 掌握PL/SQL块结构、PL/SQL的基本语法、PL/SQL的控制结构。
(2) 掌握PL/SQL块中使用复合数据类型和游标的方法。
(3) 掌握PL/SQL异常处理技术。
(4) 掌握存储过程、存储函数、触发器高级数据库对象的基本作用。
(5) 掌握存储过程、存储函数、触发器的建立、修改、查看、删除操作。
实验内容:(1) 记录执行命令和操作过程中遇到的问题及解决方法,注意从原理上解释原因。
(2) 记录利用SQL*Plus或iSQL*Plus编写、执行PL/SQL程序的命令。
(3) 记录执行命令和操作过程中遇到的问题及解决方法,注意从原理上解释原因。
(4) 记录利用企业管理器管理存储过程、存储函数、触发器的方法。
(5) 记录利用SQL*Plus和iSQL*Plus管理存储过程、存储函数、触发器的命令。
实验步骤与调试过程:1、打开DOS命令窗口,在其中输入sqlplus system/system命令进入oracle数据库系统。
2、在SQLPLUS下输入create table business(bno char(10) primary key,bname char(50) not null,btype char(4),baddress char(20),btel char(13));,创建一个business表,3、用同样的方法新建hospital、card、staff、consume、insurance等表,使用“desc 报表名”查看表结构。
4、新建表staff_sq1,包含两列sno、sname,5、在SQLPLUS下输入alter table staff_sq1 rename to staff_sq10;,修改以表名。
6、创建基于医院名的索引,输入create index hospital_name_index on HOSPITAL(HNAME DESC);。
PL/SQL程序设计PL/SQL是Oracle数据库中的编程语言,用于在数据库中创建存储过程、函数、触发器等数据库对象,以提供更高级的数据处理和业务逻辑功能。
下面将介绍一些PL/SQL的基本概念和用法,并通过示例演示其程序设计能力。
PL/SQL是一种结合了SQL和Procedural Language的编程语言,它允许在数据库中编写逻辑代码。
PL/SQL包括了一些基本的语法元素,如条件判断、循环语句、异常处理等,还可以使用SQL语句进行数据查询和数据操作。
PL/SQL程序有两种类型:匿名块和命名块。
匿名块是一段临时的、不可重复使用的代码,而命名块则是一段命名的代码,可以在其它代码中多次调用。
下面是一个例子,演示了如何使用PL/SQL创建一个匿名块:```plsqlDECLAREv_name VARCHAR2(100) := 'John';BEGINDBMS_OUTPUT.PUT_LINE('Hello, ' , v_name , '!');END;```在上面的例子中,我们声明了一个变量v_name,并将其赋值为'John'。
然后使用DBMS\_OUTPUT.PUT\_LINE函数将Hello, John!打印到控制台。
除了匿名块,PL/SQL还可以创建存储过程、函数和触发器等可重复使用的数据库对象。
下面是一个示例,演示了如何使用PL/SQL创建一个简单的存储过程:```plsqlCREATE OR REPLACE PROCEDURE get_employeep_employee_id IN NUMBER,p_department_id OUT NUMBER,p_salary OUT NUMBERISBEGINSELECT department_id, salary INTO p_department_id, p_salary FROM employeesWHERE employee_id = p_employee_id;END;```在上面的例子中,我们创建了一个名为get\_employee的存储过程。
实验6 PL/SQL程序设计1 实验目的(1)掌握PL/SQL程序开发方法。
(2)掌握存储过程、函数、触发器、包的创建于调用。
2 实验要求(1)根据图书销售系统业务要求创建特定的存储过程、函数、触发器。
(2)根据图书销售系统业务要求将图书销售系统相关的函数、存储过程封装到包里。
3 实验步骤以bs用户登录BOOKSALES数据库,利用PL/SQL程序编写下列功能模块。
(1)创建一个存储过程,输出不同类型图书的数量、平均价格。
SQL> create or replace procedure proc_category_static2 as3 --定义游标,获取当前有哪些图书种类4 cursor c_all_category is select distinct category from books;5 --图书的平均价格6 v_avg_cost number;7 begin8 --保存图书种类9 for v_each_category in c_all_category LOOP10 select avg(retail) into v_avg_cost from books where category= group by category;11 ('种类为:'||||',平均价格为:'|| v_avg_cost);12 END LOOP;13 end proc_category_static;14 /(2)创建一个存储过程,以客户号为参数,输出该客户订购的所有图书的名称与数量。
create or replace procedure proc_get_orderinfo(2 p_customer_id %type)3 as4 --声明游标存储客户的订单号5 cursor c_orderid is select order_id from orders where customer_id=p_customer_id;6 v_orderid %type;7 --声明游标存储订单信息8 cursor c_orderitem is select ISBN, sum(quantity) totalnum from orderitem where order_id=v_orderid group by ISBN;9 --保存图书的书名10 v_title %type;1112 begin13 open c_orderid;14 LOOP15 fetch c_orderid into v_orderid;16 exit when c_orderid%NOTFOUND;17 for v_orderitem in c_orderitem LOOP18 select title into v_title from books where ISBN=;19 (p_customer_id||'订购'||v_title||'的数量是'||;20 end LOOP;21 end LOOP;22 close c_orderid;23 end proc_get_orderinfo;24 /exec proc_get_orderinfoo(1001);(3)创建一个存储过程,以订单号为参数,输出该订单中所有图书的名称、单价、数量。
create or replace procedure proc_get_orderinfoo(p_order_id %type)as--声明游标存储订单号的ISBNcursor c_ISBN is select ISBN from orderitem where order_id=p_order_id;v_ISBN %type;--声明游标存储订单信息cursor c_orderitem is select ISBN,sum(quantity) totalnum from orderitem where ISBN=v_ISBN ;v_title %type;v_retail %type;beginopen c_ISBN;LOOPfetch c_ISBN into v_ISBN;exit when c_ISBN%NOTFOUND;for v_orderitem in c_orderitem LOOPselect title,retail into v_title,v_retail from books where ISBN=; (p_order_id||v_title||v_retail||;end LOOP;end LOOP;close c_ISBN;end proc_get_orderinfoo;/(4)创建一个存储过程,以出版社名为参数,输出该出版社出版的所有图书的名称、ISBN、批发价格、零售价格信息。
create or replace procedure proc_get_name(p_title %type)ascursor c_orderid is select order_id from orders where customer_id=p_customer_id;v_orderid %type;cursor c_orderitem is select ISBN, sum(quantity) totalnum from orderitem where order_id=v_orderid group by ISBN;v_title %type;beginopen c_orderid;LOOPfetch c_orderid into v_orderid;exit when c_orderid%NOTFOUND;for v_orderitem in c_orderitem LOOPselect title into v_title from books where ISBN=;(p_customer_id||''||v_title||'的数量是'||;end LOOP;end LOOP;close c_orderid;end proc_get_orderinfo;/set serveroutput ondeclarev_customer number;beginv_customer :=&x;proc_get_orderinfo(v_customer);end;/(5)创建一个存储过程,输出每个客户订购的图书的数量、价格总额。
create or replace procedure proc_category_staticascursor c_all_category is select distinct category from books;v_sum_cost number;beginfor v_each_category in c_all_category LOOPselect sum(retail) into v_sum_cost from books where category= group by category;('种类为:'||||',总价格为:'|| v_sum_cost);END LOOP;end proc_category_static;/set serveroutput onexec proc_category_static;/(6)创建一个存储过程,输出销售数量前3名的图书的信息及销售名次。
create or replace procedure proc_category_staticascursor c_all_category is select distinct category from books;v_sum_retail number;beginfor v_each_category in c_all_category LOOPselect sum(cost) into v_sum_retail from books where category= group by category;('种类为:'||||',数量为:'|| v_sum_retail);END LOOP;end proc_category_static;/set serveroutput onexec proc_category_static;(7)创建一个存储过程,输出订购图书数量最多的客户的信息及订购图书的数量。
(8)创建一个存储过程,输出各类图书中销售数量最多的图书的信息及销售的数量。
(9)创建一个包,实现查询客户订购图书详细信息的分页显示。
create or replace procedure proc_title_staticascursor c_all_title is select distinct title from books;v_sum_retail number;beginfor v_each_title in c_all_title LOOPselect sum(cost) into v_sum_retail from books where title= group by title;('信息为:'||||',数量为:'|| v_sum_retail);END LOOP;end proc_title_static;/(10)创建一个包,利用集合实现图书销售排行榜的分页显示。
(11)创建一个包,包含一个函数和一个过程。
函数以图书类型为参数,返回该类型图书的平均价格。
过程输出各种类型图书中价格高于同类型图书平均价格的图书信息。
create or replace package pkg_bookasfunction get_book_avgcost(p_book_category %type) return number;procedure pro_showbook(p_book_category %type);end;/create or replace package body pkg_bookasfunction get_book_avgcost(p_book_category %type)return numberasv_ISBN %type;cursor c_books is select retail from BOOKS where ISBN=v_ISBN;v_sumcost number(6,2):=0;v_count number(6) :=0;v_avgcost number :=0;v_book_category varchar2(10);beginselect ISBN into v_ISBN from BOOKS where category=v_book_category; for v_retail in c_books LOOPv_count:=v_count+1;v_sumcost:= v_sumcost+;end LOOP;v_avgcost:=v_sumcost/v_count;(v_book_category|| '--'||v_avgcost);return v_avgcost;end;procedure pro_showbook(p_book_category %type) asv_book_category varchar2(10);cursor c_books is select * from BOOKS where retail>=get_book_avgcost(v_book_category);beginfor v_books in c_books loop||' '||||' '||||' '||||' '||||' '||; end loop;end;end;/set serveroutput ondeclarep_book_category %type;avgcost number;beginp_book_category:='管理';avgcost:=(p_book_category); ('管理');end;/(12)创建一个触发器,当客户下完订单后,自动统计该订单所有图书价格总额。