Oracle数据库应用技术-实验指导书_第1页
Oracle数据库应用技术-实验指导书_第2页
Oracle数据库应用技术-实验指导书_第3页
Oracle数据库应用技术-实验指导书_第4页
Oracle数据库应用技术-实验指导书_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Oracle数据应用技术实验指导书湖南工程职业技术学院(刘静)2010年3月实验1 Oracle入门(2学时)一、目标1. 能够使用Oracle Enterprise Manager Console2. 能够创建表空间和用户账户3. 能够使用Oracle Net Configuration Assistant配置网络服务名4. 能够用SQL *Plus 连接Oracle服务器二、实验内容及要求1.实验内容(1)使用Oracle Enterprise Manager Console熟悉Oracle企业管理器控制台,能够通过图形化的用户界面查看Oracle数据库的物理组件和逻辑组件,加深对Orac

2、le体系结构的理解。分析:要熟悉Oracle数据库,必须先安装Oracle服务器软件,或者安装客户端软件,再通过网络配置链接到一个远程的Oracle服务器。假定已经在本机上安装了Oracle数据库,用户可以使用Oracle Enterprise Manager Console来管理数据库。使用企业管理器控制台可以执行各项任务,如管理Oracle实例、创建表空间、用户账户、表和同义词等。用户需要以管理员身份登陆到Oracle数据库进行练习。(2) 创建表空间GITM公司想要在数据库总存储员工信息、工资记录、部门信息和产品信息,这些信息将存储在不同的表中。为了与其他建立在此数据库上的应用系统实现存

3、储空间的独立,需要建一个名为GITM的表空间,此应用系统的中的表都应该存储在此表空间中。(3) 创建用户账户在数据库中已创建GITM表空间用于存储公司员工和部门信息表。现在需要一个特定用户,该用户能够访问相关信息,并可创建数据库对象,如表、视图和索引等。要求创建一个用户,并向其授予连接数据库、创建模式对象和使用表空间的权限。(4) 使用Oracle Net Configuration AssistantOracle数据库服务器可以被多个用户访问以执行不同的操作。要求使用Oracle Net Configuration Assistant工具来配置网络组件,使用户能够访问远程数据库。(5) 使用

4、SQL *Plus和iSQL *Plus连接Oracle服务器Oracle数据库网络配置成功之后,就可以使用Oracle工具连接和使用数据库了。SQL *Plus是最常用的Oracle查询工具,要求用前面练习创建的用户登录数据库,以创建应用系统的表。2. 实验要求根据实验内容指定的要去完成实训,并提交实训结果。实验2 SQL查询和SQL函数(2学时)1、 目标1 能够构造select语句2 能够测试SQL操作符3 能够使用SQL函数2、 实验内容及要求1.实验内容(1)测试ROWID和ROWNUM伪列用户表因为没有建立主键约束而插入了重复的记录,为了解决数据冗余问题,必须删除表中重复的记录。用

5、户应用程序只关心查询结果集中的一部分,需要限制查询返回的行数。1) 启动SQL *PLUS。创建表myt_est:CREATE TABLE my_test ( id NUMBER(3), name VARCHAR2(20) );2) 向表中插入5条完全相同的命令。INSERT INTO my_test VALUES (1, 'This is line 1');INSERT INTO my_test VALUES (1, 'This is line 1');INSERT INTO my_test VALUES (1, 'This is line 1'

6、;);INSERT INTO my_test VALUES (1, 'This is line 1');INSERT INTO my_test VALUES (1, 'This is line 1');COMMIT;查看表中记录: SELECT * FROM my_test;3) 测试ROWID伪列。要求查看伪列、id、name,并利用伪列删除第三行记录,再执行查询语句:SELECT ROWNUM, id, name FROM my_test; 查看第三行记录是否被删除。4) 测试ROWNUM伪列。使用ROWNUM限制查询ROWNUM<3的行数。(2) 构

7、造select语句创建表employee:CREATE TABLE employee ( empno VARCHAR2(5) PRIMARY KEY, ename VARCHAR2(25), designation VARCHAR2(20), dateofjoining DATE, branchcode VARCHAR2(15) REFERENCES Branch_Details (branchcode),deptcode VARCHAR2(15) REFERENCES Dept_Details (deptcode) );INSERT INTO employee VALUES ('E0

8、01', 'John Smith' , 'Manager', '1-2月-1998', 'BH01', 'DP02');插入多条记录:INSERT INTO employee VALUES ('E002', 'Jane', 'Sales Manager','1-6月-2001', 'BH02', 'DP02');INSERT INTO employee VALUES ('E003', 'H

9、arry ', 'Accountant', '1-11月-2003', 'BH03', 'DP01');INSERT INTO employee VALUES ('E004', 'JOE', 'Accountant', '1-12月-2002', 'BH03', 'DP03');INSERT INTO employee VALUES ('E005', 'Michael', 'Manager

10、', '1-1月-1999', 'BH03', 'DP02');INSERT INTO employee VALUES ('E006', 'Jack Aranck', 'Sales Manager', '1-2月-2003', 'BH05', 'DP01');INSERT INTO employee VALUES ('E007', 'George', 'Sr. Accountant', '

11、1-11月-2004', 'BH05', 'DP03');INSERT INTO employee VALUES ('E008', 'John Aranck' , 'Sr. Accountant', '1-2月-2005', 'BH01', 'DP02');职员表employee中的信息需要做较大的调整,在调整之前要先对表中的总要记录做一个副本。查询职员信息时需要指定各个列的别名,如以中文名称做标题等。(3) 测试SQL操作符检查表 Salary_Record

12、s的描述:CREATE TABLE Salary_Records (empno VARCHAR2(5) REFERENCES Employee(empno), working_Days NUMBER,empsal NUMBER );公司的财务部需要检查员工的工资,请使用SQL操作符编写语句,检索工资在15000到20000元之间的职员的信息。(4) 使用连接操作符创建表order_master:CREATE TABLE ORDER_MASTER ( ORDERNO VARCHAR2(5) PRIMARY KEY, ODATE DATE, VENCODE VARCHAR2(5), OSTATUS

13、 CHAR(1), DEL_DATE DATE );INSERT INTO ORDER_MASTER VALUES ('O001', '12-8月-08', 'V001','y','22-8月-08');INSERT INTO ORDER_MASTER VALUES ('O002', '5-7月-08', 'V008','n','6-7月-08');INSERT INTO ORDER_MASTER VALUES ('O003&#

14、39;, '12-9月-08', 'V012','n','22-9月-08');COMMIT;销售经理想查看vencode为V008的供应商的订单状态,要求使用连接操作符编写查询语句,使ORDERNO、ODATE、DEL_DATE在同一列显示,而非分列显示。(5) 使用集合操作符要求编写语句以显示vendor_master和order_master表中不重复的vencode列值,只列出ostatus为“c”的vencode。(6) 使用SQL日期函数公司决定提升2003年前半年之前就职的职员。要求显示职员的就职年度,如果日期晚于“

15、01-7月-2003”,则四舍五入到下一年。编写语句以显示2003年7月1日之前就职职员的详细信息。2. 实验要求根据实验内容指定的要去完成实训,并提交实训结果。实验3 锁和表分区(2学时)一、目标1 能够理解锁定的概念2 能够测试行级锁3 能够测试共享锁和行共享锁4 能够创建表分区二、实验内容及要求1.实验内容(1)测试行级锁先创建表空间GITM,再创建用户:ACCP,密码:ACCP,用ACCP登陆SQL *PLUS、CREATE TABLE employee ( empno VARCHAR2(5) PRIMARY KEY, ename VARCHAR2(25), designation V

16、ARCHAR2(20), dateofjoining DATE, branchcode VARCHAR2(15),deptcode VARCHAR2(15) );INSERT INTO employee VALUES ('E001', 'John Smith' , 'Manager', '1-2月-1998', 'BH01', 'DP02');INSERT INTO employee VALUES ('E002', 'Jane', 'Sales Manager

17、','1-6月-2001', 'BH02', 'DP02');INSERT INTO employee VALUES ('E003', 'Harry ', 'Accountant', '1-11月-2003', 'BH03', 'DP01');INSERT INTO employee VALUES ('E004', 'JOE', 'Accountant', '1-12月-2002'

18、, 'BH03', 'DP03');INSERT INTO employee VALUES ('E005', 'Michael', 'Manager', '1-1月-1999', 'BH03', 'DP02');INSERT INTO employee VALUES ('E006', 'Jack Aranck', 'Sales Manager', '1-2月-2003', 'BH05',

19、'DP01');INSERT INTO employee VALUES ('E007', 'George', 'Sr. Accountant', '1-11月-2004', 'BH05', 'DP03');INSERT INTO employee VALUES ('E008', 'John Aranck' , 'Sr. Accountant', '1-2月-2005', 'BH01', 'DP02

20、');授予SCOTT用户更新EMPLOYEE表的权限。grant all on employee to scott;ACCP用户执行下列命令:select * from employee where empno=E006 for update;update employee set designation=Accountant where empno=E006;打开SQL PLUS的另一个实例,以SCOTT身份登陆并更新employee表的E006行。update ACCP.employee SET designation=Accountant where empno=E006;这时候

21、更新不成功,因为该行被ACCP用户锁定。需等ACCP用户释放该锁。切换到ACCP用户,执行COMMIT命令。再切回SCOTT用户,执行更新操作。(2) 测试共享锁案例:GITM公司人力资源部的职员每个周末都要对employee表进行统计以形成周报表。因为统计报表需要较长的时间,为了保证表的一致性,不希望在统计的时间段里有记录的更新。使用什么方法能达到此效果?分析:采用共享锁。共享锁锁定表,仅允许其他用户查询表中的行,但不允许插入、更新或删除行。多个用户可以同时在同一表中放置共享锁,即允许资源共享,因此得名“共享锁”。在此案例中,通过共享锁,人力资源部的职员读取表employee进行统计,那么其

22、他用户无法更新该表。在统计完成之后释放锁定,其他用户就可以进行更新了。1) 启动SQL *PLUS,以ACCP身份登录,执行以下命令来锁定employee表。SQL> lock table employee in share mode;2) 打开SQL *PLUS的另一个实例,以SCOTT用户身份登录,执行下列语句。SQL>delete from accp.employee where empno='E005'此时,SQL *PLUS停止响应删除操作等待释放锁。3) 切换到第一个SQL *PLUS实例并提交事务。SQL>COMMIT;4) 此时,SCOTT用户

23、的删除操作得到响应,并成功返回。执行以下命令取消删除。SQL>ROLLBACK;5) 以SCOTT用户身份锁定employee表。SQL>LOCK TABLE accp.employee IN SHARE MODE;6) 再以ACCP用户身份锁定employee表。SQL>LOCK TABLE employee IN SHARE MODE;此时,表employee被两个用户同时锁定,所有用户都不能在此表上执行更新操作。当所有用户执行COMMIT命令或ROLLBACK命令结束事务时,所才会被释放。(3) 测试行共享锁案例:GITM公司的多个部门都需要访问和更新employee表

24、,这些用户都有权限更新表的行,但是有的用户使用了独占锁定表,使其他用户无法更新此表。如何避免这种情况?分析:可以通过使用行共享锁来限制其他用户独占访问表。以行共享方式锁定表时,允许多个用户同时更新同一表中的不同行。1) 在ACCP模式中执行下列命令,以行共享模式来锁定employee表。SQL>LOCK TABLE employee IN ROW SHARE MODE;2) 通过输入下列命令来更新employee表。SQL>UPDATE employee SET ename='pam' WHERE empno='E001'3) 打开SQL *PLUS

25、的另一个实例SCOTT,然后更新employee表中的记录。SQL>UPDATE employee SET ename='Sam' WHERE empno='E003'4) 执行以下语句,尝试独占锁定employee表。SQL>LOCL TABLE ACCP.employee IN EXCLUSIVE MODE NOWAIT;(4) 创建范围分区创建employee_details表,包含employee_id, ename, dateofjoining, deptname, branchname和branchcode等列,根据职员的就职日期对emp

26、loyee表进行分区。create table employee_details(emp_id varchar2(5),ename varchar2(25),job varchar2(20),dateofjoining date )partition by range(dateofjoining)(partiton doj1 values less than(to_date('01/04/2001','DD/MM/YYYY'),partiton doj2 values less than(to_date('01/07/2003','DD/

27、MM/YYYY'),partiton doj3 values less than(to_date('01/09/2004','DD/MM/YYYY'),partiton doj4 values less than(to_date('01/10/2005','DD/MM/YYYY') );1) 执行下列语句向分区表中插入测试记录。SQL>INSERT INTO employee_details SELECT empno,ename,designation,dateofjoining FROM employee;2) 执

28、行下列语句查询分区doj4中的记录。SQL>SELECT * FROM employee_details partition(doj4);(5) 创建散列分区问题:GITM公司的销售部需要根据产品编号分析每个月的销售记录。要求在monthly_sales表中创建散列分区快速完成次工作。create table monthly_sales(product_id varchar2(5) not null,sales_date date not null,sales_cost number )partiton by hash(product_id)(partiton pid1,partiton

29、 pid2,partiton pid3 );2. 实验要求根据实验内容指定的要去完成实训,并提交实训结果。实验4 数据库对象(2学时)一、目标1 能够创建和使用同义词2 能够创建和使用序列3 能够创建和使用视图4 能够创建各种类型的索引二、实验内容及要求1.实验内容(1)创建同义词问题:为表“ticket_header”创建一个名为“tick”的同义词。1) 创建表空间GITM,创建用户ACCP,密码ACCP。以ACCP用户身份登陆SQL *PLUS。2) 在SQL提示符下执行语句:create table ticket_header( fleet_id number(5), ticket_n

30、o varchar2(6), origin varchar2(6), destination varchar2(6), adults number(1) );3) 执行语句:create synonym tick for ticket_header;提示:create synonym为创建同义词的关键词。(2)创建公有同义词问题:要求所有用户都能够访问ticket_header表而不必知道该表属于哪个用户,请实现。分析:oracle支持两种类型的同义词:私有同义词、公有同义词。私有同义词只能由创建它的用户所使用;公有同义词可以由数据库中所有的用户使用。练习1中创建的是私有同义词。要创建公有同义

31、词必须拥有相应的权限。1) 在用户ACCP下执行语句:create public synonym pub_tick for ticket_header;提示:create public synonym为创建公有同义词的关键词。执行上面语句,oracle将显示“权限不足”的提示消息。2) 再以system用户身份登陆到oracle数据库。执行语句:create public synonym pub_tick for accp.ticket_header;3) 以ACCP用户登陆,执行语句:select * from pub_tick;(3)删除同义词问题:将练习2中创建的同义词tick删除1)

32、以用户ACCP登陆,执行语句:drop public synonym pub_tick;Oracle将提示“权限不足”。提示:这是因为删除公有同义词必须拥有“drop public synonym”权限。而ACCP用户不具有该权限。2) 在ACCP用户下,执行语句:drop synonym tick;(4)创建序列问题:请创建一个名为“new_seq”的序列。要求:初始值为25,每次增加2,达到75时,又从25重新开始。提示:初始值25 start with 25 每次增加2 increment by 2 达到75,也就是说最大值为75 maxvalue 75那么最小值就是25 minvalu

33、e 25达到75后,又从25重新开始,也就是说该序列可以循环计数 cycle 执行下面语句: create sequence new_seqincrement by 2start with 25maxvalue 75minvalue 25cyclenocache ;(5)访问序列提示:Oracle提供了两个伪列,可以用来访问伪列的值 currval和nextvalcurrval返回的是序列的当前值;nextval返回的是下一个序列值在练习4完成的基础上,执行语句:1) select new_seq.nextvalue from dual; 2) select new_seq.currvalue

34、 from dual; (6)更改序列1) 在SQL提示符下执行下列语句:ALTER SEQUENCE new_seq INCREMENT BY 5;2) 执行下列语句查看所作的修改:SELECT new_seq.NEXTVAL FROM dual;(7)删除序列DROP SEQUENCE new_seq;(8)创建视图问题:用户经常只需要显示“fleet_header”表的day列和route_id列,请给出解决方案。1) 先创建基表CREATE TABLE  fleet_header ( day date, name varchar2(20), route_id number(5

35、) );2) 创建视图CREATE VIEW fleet( day, route_id) AS SELECT day, route_id FROM fleet_header;3) 访问视图SELECT * FROM fleet;(9)修改视图定义将练习8中所创建的视图,修改为显示“fleet_header”表中所有的列。CREATE OR REPLACE VIEW fleet AS SELECT * FROM fleet_header;(10)创建带有错误的视图在并不存在的表“product”上创建错误视图:CREATE FORCE VIEW myview AS SELECT * FROM p

36、roduce;(11)删除视图DROP VIEW myview;(12)创建索引问题:如何在ticket_header表(练习1中已经创建了该表,不需重复创建)的adults列上创建名为”a_index”的索引。CREATE INDEX a_index ON ticket_header(adults);(13)创建唯一索引在表place_header的place_name列上创建名为“place_ind”的唯一索引。CREATE TABLE place_header ( place_id number primary key, place_name varchar2(20), bus_stat

37、ion varchar2(20) );CREATE UNIQUE INDEX place_ind ON place_header(place_name);2. 实验要求根据实验内容指定的要去完成实训,并提交实训结果。实验5 使用PL/SQL(2学时)一、目标1 理解逻辑比较的意义2 能使用各种控制结构3 能编写错误处理程序二、实验内容及要求1.实验内容(1)使用条件控制问题:由于工程取得巨大成功,GITM公司决定向员工发放奖金。奖金根据职员所在部门的代码来计算。如果部门代码为“DP01”,奖金为2000元;部门代码为“DP02”,奖金为1700元;部门代码为“DP03”,奖金为1500元,请设

38、计解决方案。reate table salary_records(empcode varchar2(10),empname varchar2(30),deptcode varchar2(20),empsal number );insert into salary_records values('E001','Jacica','DP01',1000);insert into salary_records values('E002','Smith','DP02',1500);insert into sa

39、lary_records values('E003','Marke','DP03',2000);SET SERVEROUTPUT ONDECLARE DPTCODE VARCHAR2(15);EMP_CODE VARCHAR2(10);SALARY NUMBER;BEGINSELECT DEPTCODE, EMPCODE, EMPSAL INTO DPTCODE, EMP_CODE, SALARY FROM SALARY_RECORDS WHERE EMPCODE='&EMPID'FOR UPDATE OF EMPSAL;

40、IF DPTCODE='DP01' THENUPDATE SALARY_RECORDS SET EMPSAL = SALARY + 2000 WHERE EMPCODE= EMP_CODE ;ELSIF DPTCODE = 'DP02' THENUPDATE SALARY_RECORDS SET EMPSAL = SALARY + 1700 WHERE EMPCODE = EMP_CODE;ELSIF DPTCODE = 'DP03' THENUPDATE SALARY_RECORDS SET EMPSAL = SALARY + 1500 WHE

41、RE EMPCODE= EMP_CODE;END IF;COMMIT;END;(2) 使用循环控制请编写一个程序,用以接受用户输入的学生编号和课程。在course_details表中插入详细信息。在course_details表中插入由用户分5次输入的详细信息。每次在表中插入记录时,学生编号都应增加1。DECLAREcourserec course_details%ROWTYPE;counter NUMBER:=0;BEGINcourserec.sid:=&student_id;courserec.course:='&Course_name'WHILE coun

42、ter < 5LOOPINSERT INTO course_details values(courserec.sid,courserec.course);counter:=counter+1;courserec.sid:=courserec.sid+1;END LOOP;END;/(3) 使用预定义异常公司通过employee表维护员工记录,此表包含职员的信息,如职员编号、职员姓名和职员职称等。要求编写一段PL/SQL代码,用以接受职员编号并检索职员姓名。将职员姓名存储在变量empname中。如果代码引发VALUE_ERROR异常,则向用户显示错误消息。(4) 引发应用程序错误要求编写一

43、个程序,用以接受用户输入的职员编号、工资和部门代码。如果部门代码为“DP01”且工资高于10000元,则更新职员的工资。如果工资低于10000元,则显示消息“工资低于10000元”。2. 实验要求根据实验内容指定的要去完成实训,并提交实训结果。实验6 游标管理(2学时)1、 目标能够使用游标二、实验内容及要求(1)隐式游标的工作原理问题:公司的经理想根据职员编号查看其所在部门的名称,部门名称存储在dept_details表中。请编写一段代码以接受职员编号并显示相应的部门名称。假设职员表格employee如下所示,有8条记录:create table employee( empno varcha

44、r2(5), ename varchar2(25), designation varchar2(20), dateofjoining date, branchcode varchar2(15),deptcode varchar2(15) );insert into employee values ('e001', 'john smith' , 'manager', '1-2月-1998', 'bh01', 'dp02');insert into employee values ('e002&

45、#39;, 'jane', 'sales manager','1-6月-2001', 'bh02', 'dp02');insert into employee values ('e003', 'harry ', 'accountant', '1-11月-2003', 'bh03', 'dp01');insert into employee values ('e004', 'joe', &#

46、39;accountant', '1-12月-2002', 'bh03', 'dp03');insert into employee values ('e005', 'michael', 'manager', '1-1月-1999', 'bh03', 'dp02');insert into employee values ('e006', 'jack aranck', 'sales manager'

47、;, '1-2月-2003', 'bh05', 'dp01');insert into employee values ('e007', 'george', 'sr. accountant', '1-11月-2004', 'bh05', 'dp03');insert into employee values ('e008', 'john aranck' , 'sr. accountant', '1

48、-2月-2005', 'bh01', 'dp02');表格dept_details,有3条记录如下所示:create table dept_details (deptcode varchar2(15), deptname char(15) ) ;insert into dept_details values ('dp01','marketing'); insert into dept_details values ('dp02','sales');insert into dept_detai

49、ls values ('dp03','accountants');SET SERVEROUTPUT ONDECLARE deptnm VARCHAR2(25);dept_code VARCHAR2(10);BEGINSELECT deptcode INTO dept_code FROM employee WHERE empno='&Employee_Number'SELECT deptname INTO deptnm FROM dept_details WHERE deptcode = dept_code;DBMS_OUTPUT.PUT_

50、LINE('部门名称: ');DBMS_OUTPUT.PUT_LINE('-');DBMS_OUTPUT.PUT_LINE(deptnm);EXCEPTIONWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE('职员不存在');END;(2)显式游标的工作原理问题:公司的助理销售经理想将总净价大于2000元项目的项目编号和总价值单独存储在totalworth表中。要求编写一段代码可以显示总净价大于2000元的项目编号和总价值。要求利用表格itemfile完成要求。表格itemfile如下所示:create ta

51、ble itemfile ( itemcode varchar2(4), itemdesc varchar2(20), p_category varchar2(20), qty_hand number(5), re_level number(5), max_level number(5), itemrate number(7,2) );insert into itemfile values('i201','nuts','spares',100,50,250,20);insert into itemfile values('i202'

52、;,'bolts','spares',95,125,300,16.5);insert into itemfile values('i204','holders','spares',18,30,75,112);insert into itemfile values('i205','covers','accessories',30,15,50,400);insert into itemfile values('i203','panels',

53、'accessories',75,30,150,4000);insert into itemfile values('i206','brackets','spares',150,73,200,132);commit;create table totalworth(ITEMCODE VARCHAR2(5),TOTAL_WORTH NUMBER);DECLAREitemrec itemfile%ROWTYPE;CURSOR itemcursor IS SELECT * FROM itemfile;BEGINOPEN itemcurso

54、r;FETCH itemcursor INTO itemrec;WHILE itemcursor%FOUND LOOPFETCH itemcursor INTO itemrec;IF itemrec.ITEMRATE * itemrec.QTY_HAND > 2000 THENINSERT INTO totalworth VALUES (itemrec.itemcode,itemrec.ITEMRATE * itemrec.QTY_HAND);END IF;END LOOP;CLOSE itemcursor;END;(3)循环游标工作原理问题:公司的总经理想要查询各个部门的所有职员的姓名

55、。要求编写一段代码以显示部门名称和此部门的所有职员姓名。用循环游标实现。表格dept_details各个部门的信息:create table dept_details (deptcode varchar2(15) , deptname char(15) ) ;insert into dept_details values ('dp01','marketing'); insert into dept_details values ('dp02','sales');insert into dept_details values (&#

56、39;dp03','accountants');表格employee存储职员的详细信息:create table employee( empno varchar2(5), ename varchar2(25), designation varchar2(20), dateofjoining date, branchcode varchar2(15) ,deptcode varchar2(15) );insert into employee values ('e001', 'john smith' , 'manager',

57、'1-2月-1998', 'bh01', 'dp02');insert into employee values ('e002', 'jane', 'sales manager','1-6月-2001', 'bh02', 'dp02');insert into employee values ('e003', 'harry ', 'accountant', '1-11月-2003', &#

58、39;bh03', 'dp01');insert into employee values ('e004', 'joe', 'accountant', '1-12月-2002', 'bh03', 'dp03');insert into employee values ('e005', 'michael', 'manager', '1-1月-1999', 'bh03', 'dp02'

59、);insert into employee values ('e006', 'jack aranck', 'sales manager', '1-2月-2003', 'bh05', 'dp01');insert into employee values ('e007', 'george', 'sr. accountant', '1-11月-2004', 'bh05', 'dp03');insert in

60、to employee values ('e008', 'john aranck' , 'sr. accountant', '1-2月-2005', 'bh01', 'dp02');SET SERVEROUTPUT ONBEGINFOR dept_details IN (SELECT deptcode, deptnameFROM dept_details)LOOPDBMS_OUTPUT.PUT_LINE('部门');DBMS_OUTPUT.PUT_LINE('-');

61、DBMS_OUTPUT.PUT_LINE(dept_details.DEPTNAME);FOR employee in (SELECT empno, enameFROM employeeWHERE DEPTCODE = DEPT_DETAILS.DEPTCODE)LOOPDBMS_OUTPUT.PUT_LINE('职员: '|employee.ENAME);END LOOP;END LOOP;END;(4)REF游标的工作原理问题:公司的经理想输入部门代码以检索职员姓名。要求编写一段代码,通过在表中输入部门代码来检索该部门的职员。(利用表格employee完成以上要求)。SET

62、 SERVEROUTPUT ONDECLARETYPE cursor_type IS REF CURSOR;cursor_ex cursor_type;empTable employee%ROWTYPE;optionval VARCHAR2(10); BEGIN optionval:='&Department_Code' OPEN cursor_ex FOR SELECT * FROM employee WHERE deptcode=optionval; LOOPFETCH cursor_ex INTO empTable;EXIT WHEN cursor_ex%NOTFOUND;DBMS_OUTPUT.PUT_LINE(' ');DBMS_OUTPUT.PUT_LINE('职员姓名:'|empTabl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论