免费预览已结束,剩余64页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大型数据库oracle编撰闽江学院计算机实验教学中心印制2010.8目录实验一 oracle数据库管理与工具使用2实验二 表连接、高级子查询10实验三 管理存储结构、用户、权限安全、模式和表16实验四 约束、索引、视图、序列和同义词22实验五 pl/sql编程基础28实验六 触发器、过程、函数和程序包40实验七 管理存储结构、备份与恢复48实验八 c#.net oracle数据库编程57实验一 oracle数据库管理与工具使用一、实验目的1. 掌握oracle的启动、关闭、连接和管理初始化参数 2. 熟悉em和sql*plus的使用 3. 了解用户和模式的概念,并查询hr模式表的数据 二、实验环境1. 一台pc机 2. widows xp操作系统 3. (oracle 10g+sql developer)或 oracle 11g 三、实验内容1. 启动和关闭window操作系统的oracle服务 2. 使用sql*plus连接oracle数据库 3. 使用sql*plus用sys用户关闭和启动 oracle数据库(要用系统管理员的身份登陆) 4. 使用sql*plus和em企业管理器显示所有初始化参数 5. 解锁hr用户 6. 使用hr用户连接sqlplus,查询hr模式中的表的信息。 四、实验步骤,观察与记录及结果1.启动和关闭window操作系统的oracle服务步骤(1): 进入windows xp操作系统 控制面板-管理工具-服务启动以下几个服务: oracleservice(数据库名) oracleoradb10g_home1tnslistener oracleoradb10g_home1isql*plus oracledbconsoleorcl(启动em需要的服务)操作界面:学生操作结果界面:2.使用sql*plus连接oracle数据库步骤(1): 进入windows xp操作系统 oracle - oradb10g_home1-应用程序开发-sql plus 输入:用户名:sys/orcl as sysdba 按确定。操作界面:学生代码:步骤(2): 输入:select * from hr.employees; 按回车可以查询该表数据操作界面:学生代码:学生操作结果界面:3.使用sql*plus用sys用户关闭和启动 oracle数据库(要用系统管理员的身份登陆)步骤(1): 输入并执行如下sql语句关闭oracle数据库:shutdown immediate;学生代码:学生操作结果界面:步骤(2): 输入select * from hr.employees; 按回车无法查询该表数据学生操作结果界面:步骤(3): 使用命令startup nomount; 启动与数据库对应的实例(不加载)学生代码:学生操作结果界面:步骤(4): 使用命令alter database mount; 为未加载数据库的实例加载数据库学生代码:学生操作结果界面:步骤(5): 使用命令alter database open; 将处于未打开状态的数据库设置为打开状态学生代码:学生操作结果界面:步骤(6): 使用命令shutdown immediate;startup;关闭数据库然后直接启动实例,加载数据库,打开数据库学生代码:学生操作结果界面:4.使用sql*plus和em企业管理器显示所有初始化参数步骤(1): 在sql*plus使用命令show parameter显示所有初始化参数学生代码:学生操作结果界面:步骤(2): 进入ie,http:/服务器:1158/em(如 http:/localhost:1158/em)进入em登录界面,并按指导界面输入用户名,密码和角色操作界面:学生操作结果界面:步骤(3): 在em界面中,选择“管理”页面-在“数据库管理”区-选择“所有初始化参数”链接进入所有初始化参数显示页面,并可进行查询和部分修改。学生操作结果界面:5.解锁hr用户步骤(1): 使用em用system或sys登录,通过方案-用户-编辑hr用户为解锁,同时修改密码。选择hr用户,并选择编辑如下:学生操作结果界面:步骤(2): 在sqlplus 用system或sys登录,使用以下命令完成hr用户解锁及重设密码 alter user hr account unlock; alter user hr identified by hr;学生代码:学生操作结果界面:6.使用hr用户连接sqlplus,查询hr模式中的表的信息。步骤(1): 连接:connect hr/hr;查hr模式有哪些表:select table_name from user_tables;查询employees表内容: select * from employees;学生代码:学生操作结果界面:步骤(2): 查询vendition模式“客户信息”表;connect vendition/vendition;select * from 客户信息;查询结果应该包括客户信息的所有列,并且包括该表的所有记录行。学生代码:学生操作结果界面:步骤(3): 查询“客户信息”表“客户姓名”、“客户地址”和“联系电话”列内容:学生代码:学生操作结果界面:步骤(4): 在下面的select语句中,将使用where子句以限定检索的客户信息。select 客户姓名,客户地址,联系电话 from 客户信息 where 所属业务员编号=1001 ;学生代码:学生操作结果界面:步骤(5): 下面创建的select语句用于对“客户信息”表中的信息分组,输入并执行如下语句: select 所属业务员编号 as 业务员编号,count(客户编号) as 客户数 from 客户信息 group by 所属业务员编号;学生代码:学生操作结果界面:步骤(6): 将having子句添加到刚才执行的select语句中,输入并执行如下sql语句。 select 所属业务员编号 as 业务员编号,count(客户编号) as 客户数 from 客户信息 group by 所属业务员编号 having count(客户编号)=3;学生代码:学生操作结果界面:步骤(7): 下面的sql语句使用一组数据演示trunc函数与round函数之间的区别和相同点。select trunc(46.326,2),round(46.326,2) from dual; 运行该语句中,trunc函数的返回值为46.32,round函数的返回值为46.33。 select trunc(46.326),round(46.326) from dual;学生代码:学生操作结果界面:五、实验练习,观察与记录及结果步骤(1): sqlplus中sys用户使用什么命令从当前正在使用的spfile 建立pfile(文件路径f:mypfile.ini)正确代码:create pfile=f:mypfile.ini from spfile;学生代码: 学生操作结果界面:步骤(2): sqlplus中使用什么命令查看当前正在使用的spfile的文件路径正确代码:show parameter spfile;学生代码: 学生操作结果界面:六、相关知识由于实例是oracle用来管理数据库的一个实体,在启动数据库时将在内存中创建与该数据库所对应的实例。oracle数据库的完整启动过程分为如下3个步骤:创建并启动与数据库对应的实例。为实例加载数据库。将数据库设置为打开状态。 实验二 表连接、高级子查询一、实验目的1. 理解什么是连接操作,如何进行简单的连接操作,掌握如何进行内连接、外连接、交叉连接。 2. 创建返回多行的子查询,创建返回单值的子查询,掌握嵌套子查询的使用。 二、实验环境1. 一台pc机 2. widows xp操作系统 3. (oracle 10g+sql developer)或 oracle 11g 三、实验内容1. 使用sql语句分别进行简单的连接操作,内连接、外连接、交叉连接查询。 2. 使用sql语句分别创建返回多行的子查询,创建返回单值的子查询,掌握嵌套子查询的使用。 四、实验步骤,观察与记录及结果1.使用sql语句分别进行简单的连接操作,内连接、外连接、交叉连接查询。步骤(1): 在sql plus中使用hr/hr连接 connect hr/hr;步骤(2): 输入并执行如下sql语句select s.sid , s.sname , s.sbirth , s.sclass ,s.saddress , c.department , c.cnamefrom student s , class cwhere s.sclass=c.cid;学生代码:学生操作结果界面:步骤(3): 输入并执行如下sql语句:select s.sid , s.sname , s.sclass,s.saddress , c.department , c.cname, d.dnamefrome student s,class c , department dwhere s.sclass=c.cid and c.department=d.did;学生代码:学生操作结果界面:步骤(4): 输入并执行如下sql语句:select s.sid , s.sname , s.sbirth, s.sclass,s.saddress , c.deoartment , c.cname , d.dnamefrom student s join class con s.sclass=c.cidjoin department d on c.depatment=d.did;学生代码:学生操作结果界面:步骤(5): 输入并执行如下sql语句:select s.sid , s.sname , s.sbirth , s.sclass,s.saddress , c.department, c.cname,d.dnamefrom student s natural join class c natural join department dwhere d.dname=法律系 ;学生代码:学生操作结果界面:步骤(6): 输入并执行如下sql语句:select s.sid , s.sname , s.sbirth , s.sclass, s.saddress , c.department , c.cname , d.dnamefrom student s right join class con s.sclass=c.cidright join department don c.department=d.did;学生代码:学生操作结果界面:2.使用sql语句分别创建返回多行的子查询,创建返回单值的子查询,掌握嵌套子查询的使用。步骤(1): 输入并执行如下sql语句,此语句使用子查询查询class表,以获取名为”06法2班”的cid列表.in关键字再把该返回值与student表中的cid列表进行比较.select * from studentwhere sclass in(select cid from classwhere cname =06法2班;学生代码:学生操作结果界面:步骤(2): 输入语句获取的学生信息与上一个语句获取的学生信息相同,均为属于” 06法2班”的学生信息.学生代码:学生操作结果界面:步骤(3): 输入并执行如下查询语句:select * from studentwhere sclass in (select cid from classwhere department in(select did from departmentwhere dname=法律系);学生代码:学生操作结果界面:步骤(4): 输入并执行如下查询语句, 最内层的select语句用于查询课程名为”刑法通则”的课程代号,然后上层select语句根据该课程代号查询该课程的所有成绩;次外层select 语句则使用大于等于(=)比较算符和all关键字,求出大于等于全部成绩的所有学生编号;最后由select 语句列出这些学生信息.select * from studentwhere sid in(select sid from gradewhere score=all(select score from gradewhere coid in(select coid from courseswhere coname=刑法通则);学生代码:学生操作结果界面:步骤(5): 输入并执行如下sql语句,与前一查询比较两者的运算结果,由于使用统计函数max,可以确定返回的最高成绩只有一个,所以可以使用单值子查询;另外由于每门课程只对一个代号,虽然这里没有使用统计函数,但是也可以使用单值子查询. 由此可以看出,sql语句是非常灵活的,可以由多种方法实现相同的功能.select * from studentwhere sid in(select sid from gradewhere score=(select max(score) from gradewhere coid=(select coid from courses where coname=刑法通则);学生代码:学生操作结果界面:五、实验练习,观察与记录及结果步骤(1): 在hr模式中,写一个表连接查询显示那些在雇员 davies 之后入本公司工作的雇员的name 和 hire date。学生代码: 学生操作结果界面:步骤(2): 在hr模式中,写一个表连接查询显示所有雇员的 names 和 hire dates,他们在他们的经理之前进入本公司,连同他们的经理的名字和受雇日期一起显示。列标签分别为 employee、emp hired、manager 和 mgr hired。学生代码: 学生操作结果界面:步骤(3): 在hr模式中,写一个子查询显示所有收入高于平均薪水并且工作在有任一雇员的名字中带有一个 u 的部门的雇员的 employee numbers、last names 和 salaries。学生代码: 学生操作结果界面:六、相关知识什么是子查询错误?子查询常见的错误是单行子查询返回返回了多行,单行运算符用于多行子查询.如:为了纠正该错误,改变下面sql的 = 操作为 in。select employee_id, last_name from employees where salary =(select min(salary) from employees group by department_id);子查询的另一个常见问题是内查询没有返回行。如下面sql没有名叫 haas的雇员,所以子查询无返回行,外查询得到子查询的结果 (null) 并且在 where 子句中使用该结果,外查询找不到一个 job id 等于 null 的雇员,所以也没有行返回。如果一个 job 存在 null 值,也没有返回行,因为比较两个空值还是空,因此 where 子句的条件不为 true。select last_name, job_id from employees where job_id =(select job_id from employees where last_name = haas);实验三 管理存储结构、用户、权限安全、模式和表一、实验目的1. 创建表空间 2. 创建用户 3. 创建角色使得安全模式的设置和管理容易 4. 使用grant和revoke语句授予和撤销对象权限 5. 创建表和管理表 二、实验环境1. 一台pc机 2. widows xp操作系统 3. (oracle 10g+sql developer)或 oracle 11g 三、实验内容1. 创建一个表空间 2. 创建一个用户 3. 创建一个用户配置文件,并为用户指定配置文件 4. 向用户授予或撤销系统权限,角色,授予或撤销对象权限 5. 创建基本表 四、实验步骤,观察与记录及结果1.创建一个表空间步骤(1): 使用system/orcl登录,创建一个表空间exer_tabspace,表空间的数据文件在oracle数据文件目录,文件名为exer_tabspace.dbf 限额为100m的表空间connect system/orcl;create smallfile tablespace exer_tabspace datafile f:oracleproduct10.2.0oradataorclexer_tabspace.dbf size 100m logging extent management local segment space management auto学生代码:学生操作结果界面:2.创建一个用户步骤(1): 创建一个用户tempuser,该用户的密码是oracle,默认表空间exer_tabspace,临时表空间是temp。create user tempuseridentified by oracle default tablespace userstemporary tablespace tempquota unlimited on users;学生代码:学生操作结果界面:3.创建一个用户配置文件,并为用户指定配置文件步骤(1): 按如下脚本创建一个用户配置文件,理解用户配置文件的含义。create profile tempprfile limitsessions_per_user 3cpu_per_call 2000idle_time 15logical_reads_per_call 200failed_login_attempts 2学生代码:学生操作结果界面:步骤(2): 为用户tempuser指定配置文件tempprfilealter user tempuser profile tempprfile;学生代码:学生操作结果界面:4.向用户授予或撤销系统权限,角色,授予或撤销对象权限步骤(1): 使用system/orcl登录,向用户授予连接数据库系统权限,向用户tempuser授予create session。学生代码:学生操作结果界面:步骤(2): 使用system/orcl或vendition/vendition登录,授予“vendition.商品信息”表的select 对象权限给用户tempuser;学生代码:学生操作结果界面:步骤(3): 使用tempuser/oracle登录查询vendition.商品信息学生代码:学生操作结果界面:步骤(4): 撤销向用户tempuser授予的vendition.商品信息对象权限,而后再查询该对象学生代码:学生操作结果界面:步骤(5): 撤销向用户tempuser授予的create session系统权限学生代码:学生操作结果界面:步骤(6): 向用户tempuser授予connect,resource角色学生代码:学生操作结果界面:5.创建基本表步骤(1): 登录到tempuser模式,在其中创建一个学生信息表student和一个班级信息表class。操作界面:学生代码:学生操作结果界面:步骤(2): 修改新创建表student的存储参数。alter table student movestorage(next 32kmaxextents unlimitedpctincrease 0)学生代码:学生操作结果界面:步骤(3): 修改表class的数据块参数。alter table classpctfree 40pctused 40;学生代码:学生操作结果界面:五、实验练习,观察与记录及结果步骤(1): 当用户tempuser耗尽了空间配额时,为了使用户操作可以继续进行,必须由dba为其分配更多或某配额。使用system/orcl连接,在users空间为tempuser改为10m限额学生代码: 步骤(2): 创建验证密码为private的验证方式角色private_role学生代码: 六、相关知识建立角色时,如果不指定任何验证方式,表示该角色使用非验证方式,也可以通过指定not identified选项指定角色为非验证方式。使用identified by指定角色为验证方式。修改角色private_role不使用任何验证方式,可以使用如下的alter role语句形式。alter role private_role not identified;删除用户,如删除用户scott时,由于该用户已经创建了大量的模式对象,则在删除该用户时,系统将自动提示增加 cascade 选项,否则将返回错误。drop user scott;一般情况下,分配角色是由dba完成的,如果以其他用户的身份分配角色,则要求该用户必须具有grant any role 系统权限或角色上具有with admin option选项。grant public_role,private_role to developer with admin option;实验四 约束、索引、视图、序列和同义词一、实验目的1. 理解如何在表中定义各种约束,以保证数据的完整性 2. 理解索引的作用,了解oracle提供的主要索引类型,以及各自的特点,掌握如何创建各种索引 3. 在用户模式中创建视图、可更新视图,理解视图的相关性 4. 对序列对象进行管理 5. 管理同义词 二、实验环境1. 一台pc机 2. widows xp操作系统 3. (oracle 10g+sql developer)或 oracle 11g 三、实验内容1. 创建表,主键,外键,唯一和其他约束。 2. 创建索引,并查看索引的使用情况。 3. 创建视图,查询视图的定义,并对视图进行更新。 4. 创建序列。 5. 创建公有同义词 四、实验步骤,观察与记录及结果1.创建表,主键,外键,唯一和其他约束。步骤(1): 在tempuser模式中创建表student,class学生代码:学生操作结果界面:步骤(2): 使用sql或可视化工具创建表class的主键。操作界面:学生代码:步骤(3): 使用sql或可视化工具创建表student的主键id,外键(classid)参照class(id),name唯一约束和check约束(sex=0,1) 。操作界面:学生代码:学生操作结果界面:2.创建索引,并查看索引的使用情况。步骤(1): 连接到school模式,使用如下语句在student表的sname列上创建b树非唯一索引学生代码:学生操作结果界面:步骤(2): 在student的班级信息列上创建位图索引:学生代码:学生操作结果界面:步骤(3): 输入并执行如下语句,查看该语句是否会使用索引。set autotrace traceonly select * from student where sname=刘丽;学生代码:学生操作结果界面:3.创建视图,查询视图的定义,并对视图进行更新。步骤(1): 创建一个视图student_math。这个视图基于school模式中的student表,并且该视图只包括那些系别为“数学系”的学生信息。在创建视图时使用with check option,防止更新视图时,输入非数学系的学生信息。学生代码:学生操作结果界面:步骤(2): 创建一个连接视图department_class,它包含class表中的classname列和department表的depname列,在where子句中将两个表连接在一起。 学生代码:学生操作结果界面:步骤(3): 查看视图各个列是否允许更新。输入并执行语句:col owner format a20;col table_name format a20;col column_name format a20;select *from user_updatable_columnswhere table_name=upper(department_class);学生代码:学生操作结果界面:4.创建序列。步骤(1): 创建序列,序列的开始数字为100,每次递增1,无限增长。输入并执行如下语句:学生代码:学生操作结果界面:5. 创建公有同义词步骤(1): 创建公有同义词hr_emp 为hr.employees,输入并执行如下语句:学生代码:学生操作结果界面:五、实验练习,观察与记录及结果步骤(1): 在hr模式中,创建一个名为salary_vu的视图,该视图基于所有雇员的名字、部门名、薪水和薪水级别。用employees、departments和job_grades表,分别命名列标签为employee、department、salary和grade。学生代码: 步骤(2): 显示存在于数据字典中对于 emp 表的索引和唯一性。学生代码: 六、相关知识视图有两种分类:简单和复杂,基本区别涉及dml (insert、update和delete) 操作。简单视图: 数据仅来自一个表, 不包含函数或数据分组, 能通过视图执行dml操作复杂视图: 数据来自多个表, 包含函数或数据分组,不总是允许通过视图进行dml操作什么时候应该创建索引,如果:(1)一个列包含一个大范围的值(2)一个列包含很多的空值(3)一个或多个列经常同时在一个where子句中或一个连接条件中被使用(4)表很大,并且经常的查询期望取回少于百分之2 到4 的行多不什么时候通常不值得创建索引,如果:(1)表很小(2)不经常在查询中作为条件被使用的列(3)大多数查询期望取回多于表中百分之2 到4 的行(4)表经常被更新(5)被索引的列作为表达式的的一部分被引用实验五 pl/sql编程基础一、实验目的1. 学习pl/sql程序块的结构,了解oracle匿名程序块 2. pl/sql程序中使用的数据类型 3. 如何在pl/sql中使用各种变量和常量 4. pl/sql程序的条件判断语句 5. pl/sql程序的循环控制语句 6. 在pl/sql程序中使用游标处理表中的信息 7. 在pl/sql程序中使用异常处理 二、实验环境1. 一台pc机 2. widows xp操作系统 3. (oracle 10g+sql developer)或 oracle 11g 三、实验内容1. pl/sql程序,变量的使用(标量变量或复合变量)。 2. pl/sql程序的条件判断语句和循环控制语句 3. 使用游标(隐式游标,显式游标,循环游标,动态游标 4. 异常处理(预定义,非预定义和用户自定义的异常) 四、实验步骤,观察与记录及结果1.pl/sql程序,变量的使用(标量变量或复合变量)。步骤(1): 在sql*plus中连接到school模式: 输入如下语句:在该程序中定义一个number类型的变量,为其赋值89。当运行时,程序块中的update 语句将使用此值修改grade中的分数score 字段。connect school/school;connect school/school;set serveroutput on; declarevar_score number;beginvar_score:=89;update grade set score=var_scorewhere sid=s06037201 and coid=c0154;end;学生代码:学生操作结果界面:步骤(2): sql*plus中输入如下语句:运行该程序将显示编号为s06037201的学生姓名。set serveroutput on; declarevar_name student.sname%type;beginselect snameinto var_namefrom studentwhere sid=s06037201;dbms_output.put_line(var_name);end;学生代码:学生操作结果界面:步骤(3): 在sql*plus中输入如下程序,使用记录(record)以显示某学生信息:set serveroutput on; declaretype student_info is record(stu_id student.sid%type,stu_name student.sname%type);rec_student student_info;beginselect sid,snameinto rec_studentfrom studentwhere sid=s06037201;dbms_output.put_line(rec_student.stu_id);dbms_output.put_line(rec_student.stu_name);end;学生代码:学生操作结果界面:步骤(4): sql*plus中修改以上程序,使用rowtype替换record,以显示student表中sid=s06037201的信息。学生代码:学生操作结果界面:2.pl/sql程序的条件判断语句和循环控制语句步骤(1): 条件语句if(if then.elseend if)。输入并执行如下语句:set serveroutput on;declare number1 integer:=80; number2 integer:=90;begin if number1=number2 then dbms_output.put_line(number1 |=|number2); else dbms_output.put_line(number1 |=|number2); end if;end;/学生代码:学生操作结果界面:步骤(2): 循环语句 while。输入并执行如下语句:set serveroutput on;declarei number:=1;beginwhile i50 loopif mod(i,3)=0 thendbms_output.put_line(i | );end if;i:=i+1;end loop;end;/学生代码:学生操作结果界面:步骤(3): 条件语句case和循环while结合。输入并执行如下语句:set serveroutput on;declare i number:=0;begin while i10; end loop;end;/学生代码:学生操作结果界面:3.使用游标(隐式游标,显式游标,循环游标,动态游标步骤(1): 隐式游标,它不需要用户显示定义、打开等操作,就可以浏览数据库中的表。现在使用该语句浏览school 模式中的student 表。操作界面:学生代码:学生操作结果界面:步骤(2): 使用显式游标。这次使用不带参数的显式游标,浏览school模式中的student表。在sql*plus中输入并执行如下语句:操作界面:学生代码:学生操作结果界面:步骤(3): 使用游标变量。游标变量是动态的,可以在打开游标时指定游标所使用的select语句。 在sql*plus中输入并执行如下sql 语句,该语句通过游标变量浏览student 表:操作界面:学生代码:学生操作结果界面:步骤(4): 下一个要使用的游标是更新游标。更新游标需要使用 for update子句。在sql*plus中输入并执行如下语句:执行该语句后,将修改grade表中所有score列值小于60的行。学生代码:学生操作结果界面:步骤(5): 使用循环游标浏览student 表:操作界面:学生代码:学生操作结果界面:4.异常处理(预定义,非预定义和用户自定义的异常)步骤(1): 使用scott/tiger(密码可以使用sys修改)登录,输入并执行如下语句,了解预定义异常的使用:connect scott/tiger;set serveroutput on;begin insert into emp(empno,ename,job,sal,deptno) values(7369,atg,clerk,1500,20);exception when dup_val_on_index then dbms_output.put_line(捕获dup_val_on_index异常); dbms_output.put_line(该主键已经存在);end;/学生代码:学生操作结果界面:步骤(2): 使用scott/tiger登录,输入并执行如下语句,了解未知异常的处理:set serveroutput on;declare emp_row emp%rowtype;begin select * into emp_row from emp where deptno=10;exception when others then dbms_output.put_line(异常错误(|sqlcode|); dbms_output.put_line(sqlerrm);end;/学生代码:学生操作结果界面:步骤(3): 使用scott/tiger登录,输入并执行如下语句,了解非预定义异常的使用:set serveroutput on;declare fk_delete_exception exception; pragma exception_init(fk_delete_exception,-2292);begin delete dept where deptno=20;exception when fk_delete_exception then dbms_output.put_line(该记录被另一个表外键引用不能删除);end;/学生代码:学生操作结果界面:步骤(4): 使用scott/tiger登录,输入并执行如下语句,了解用户自定义异常的使用:declare salary_error exception; var_sal emp.sal%type;begin select sal into var_sal from emp where empno=7369; if var_sal=800 then raise salary_error; end if;exception when salary_error then dbms_output.put_line(薪金超过范围);end;/学生代码:学生操作结果界面:五、实验练习,观察与记录及结果步骤(1): 输入以下代码学习复合变量类型table(相当数组)的使用,并模仿该程序写出pl/sql块,具有table变量下标和内容分别是(v_majors(1) := computer science,v_majors(2) := history, v_majors(3) := economics),并在屏幕输出 1: science2:history3:economics学生代码: 学生操作结果界面:六、相关知识pl/sql具有用户定义的数据类型,或者叫对象,定义和使用代码如下:create type baseinfo as object (sex varchar2(4),name varchar2(10);-定义代码 -使用代码 declare rose baseinfo:=baseinfo(女,rose); begin dbms_output.put_line(rose.sex); dbms_output.put_line(); end; 实验六 触发器、过程、函数和程序包一、实验目的1. 理解存储过程中各种形式的参数,创建、调用oracle存储过程 2. 创建、调用oracle函数 3. 创建程序包,创建程序包的公有成员和私有成员 4. 理解程序包中重载的过程和函数 5. 理解使用触发器 二、实验环境1. 一台pc机 2. widows xp操作系统 3. (oracle 10g+sql developer)或 oracle 11g 三、实验内容1. 存储过程(输入输出参数和局部变量)定义及调用 2. 创建函数,调用函数 3. 创建和使用触发器 4. 创建包(包头,包体),调用包的存储过程,包的函数,过程的重载 四、实验步骤,观察与记录及结果1.存储过程(输入输出参数和局部变量)定义及调用步骤(1): 不包含参数和局部变量存储过程。在school模式中输入并执行如下语句:在sql*plus中执行该语句,就会收到“过程已创建”的信息。connect school/school;create or replace procedure printstudentinfo is begin for student_cur in (select * from student) loop dbms_output.put(student_cur.sid | ); dbms_output.put(student_cur.sname | ); dbms_output.put_line(student_cur.saddress);end loop;end printstudentinfo;/学生代码:学生操作结果界面:步骤(2): 调用存储过程:在sql*plus中输入并执行如下语句, exec printstudentinfo; 调用过程printstudentinfo,将显示student 表中所有学生的信息。学生代码:学生操作结果界面:步骤(3): 编写一个过程,需要连接查询3个表,以显示学生信息,以及所在班级信息和系别信息。另外,该过程中,还需要一个输入参数。输入并执行如下sql语句:操作界面:学生代码:学生操作结果界面:步骤(4): 输入并执行如下pl/sql无名块调用getstudentinfo存储过程,执行结果将显示指定编号的学生姓名、所在班级和系的名称。学生代码:学生操作结果界面:2.创建函数,调用函数步骤(1):
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论