国家开放大学《Oracle数据库编程》形考任务1-6参考答案.docx
国家开放大学Oracle数据库编程形考任务1-6参考答案题目随机,下载后利用查找功能完成学习任务形考任务11.参照教材中PL/SQL代码编写程序,检测视图clu$是否存在,并给出提示信息。答:PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的应用。PL/SQL也是一种程序语言,叫做过程化SQL语言(ProceduralLanguage/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。PL/SQL只有Oracle数据库有。MySQL目前不支持 PL/SQL的。(1)视图介绍视图是一个逻辑表,也是一个非常重要的方案对象。实际上,视图是查看表的一种方式。视图是对根据预定义的选择标准由一个或多个行的集合建立起来的动态表的静态定义。视图可以用来定义来自一个或多个表的行和列的多种连接。通过视图,可以查看到表中的数据。视图是查看数据库表中的数据的一种方法。视图提供了存储预定义的查询语句作为数据库中的对象以备以后使用的能力。视图只是一种逻辑对象,是一种虚拟表,并不是物理对象,因为视图不占物理存储空间。在视图中被查询的表称为视图的基表。通常通过它就像使用表一样访问数据。要记住通过视图引用的数据通常来自它后面的基表。视图应该使用一致的命名约定。例如,给所有的视图增加一个前缀,如每一个视图都以v_、view_或vw_开头。这样,可以使用户在看到名称时就立即知道它代表的对象是视图。(2)视图好处使用视图的优点,如集中用户使用的数据、掩码数据的复杂性、简化权限管理以及为向其他应用程序输出而重新组织数据等。集中用户使用的数据:视图创建了一种可以控制的环境,即表中的一部分数据允许访问,而另外一部分数据则不允许访问。那些没有必要的,敏感的或不适合的数据都从视图中排除掉了。掩盖数据库的复杂性:视图把数据库设计的复杂性与用户屏蔽分开。这样就为数据库开发人员提供了一种改变数据库的设计而不影响用户使用的能力。用户只需要查询视图就可以得到所需的数据,而不用编写复杂的查询语句或者执行脚本。简化用户权限的管理:数据库所有者可以把视图的权限授予需要查询的用户,而不必将基表中某些列的查询权限授予用户。(3)视图创建可以使用3种方法创建视图,一种方法是使用create view语句,另一种方法是使用DBA studio图形工具,还可以使用创建视图向导来创建。使用create view语句创建视图create or replaceforce | noforce view user. viewName(column ,column2.)as querywith check optionConstraint constraintwith read onlyor replace 表示如果同名的视图存在,则使用新视图替代已有的视图。force强制创建视图,不考虑基表是否存在,是否具有使用基表数据的权限。noforce只有基表存在且具有权限,才可以创建视图。user表示创建视图的用户名。viewName表示将要在数据库上创建的视图名称。column指定视图中的列名。query表示生成视图的select语句。with check option指定强制检查通过视图修改数据的操作。constraint表示指定的约束名称。with read only:表示创建的视图只能检索数据,不能修改数据。形考任务21.备份user_tables.table_name到表tab1,备份dba_tables.table_name到表tab2,使用一条select语句查询表tab1和tab2,其中tab1的数据全部输出,tab2数据仅输出和tab1重复部分。答:数据导出:(1)将数据库orcl完全导出,用户名system密码manager导出到D:daochu.dmp中exp system/managerorcl file=d:daochu.dmp full=y(2)将数据库中system用户与sys用户的表导出exp system/managerorcl file=d:daochu.dmp owner=(system,sys)(3)将数据库中的表table1、table2导出exp system/managerorcl file=d:daochu.dmp tables=(table1,table2)(4)将数据库中的表table1中的字段 filed1 以"00"打头的数据导出exp system/managerorcl file=d:daochu.dmp tables=(table1)query="where filed1 like '00%'"上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。不过在上面命令后面 加上compress=y就可以了数据的导入:(1)将D:daochu.dmp中的数据导入orcl数据库中。imp system/managerorcl file=d:daochu.dmp上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。在后面加上 ignore=y 就可以了。(2)将d:daochu.dmp中的表table1导入imp system/managerorcl file=d:daochu.dmp tables=(table1)基本上上面的导入导出够用了。不少情况我是将表彻底删除,然后导入。注意:你要有足够的权限,权限不够它会提示你。数据库时可以连上的。可以用tnsping orcl来获得数据库orcl能否连上附录一:给用户增加导入数据权限的操作第一,启动sql*puls第二,以system/manager登陆第三,create user用户名IDENTIFIED BY密码(如果已经创建过用户,这步可以省略)第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATE SESSION TO用户名字第五,运行-cmd-进入dmp文件所在的目录,imp userid=system/manager full=y file=*.dmp或者imp userid=system/manager full=y file=filename.dmp形考任务3一、单项选择题1.Oracle数据库的管理员是()。A.SYSB.rootC.adminD.administration2.“altertabletab1dropcolumncol1;”的作用是()。A.删除了数据表tab1的字段col1B.为数据表tab1增加了字段col1C.修改数据表tab1的字段column名称为col1D.以上都不对3.count()的作用是()。A.数据统计B.计时器C.累加器D.以上都不对4.desc的作用是()。A.查看表/视图的结构B.改变表/视图的结构C.扩展表/视图的结构D.删除表/视图5.count()属于()。A.单行函数B.分组函数C.数值函数D.转换函数6.substr()函数的作用是()。A.取字符串子串B.连接两个字符串C.转换字符串D.复制字符串7.JOINON子句的作用是()。A.用于产生笛卡儿积B.自动找到匹配的关联字段,消除笛卡儿积C.指定一个可以消除笛卡儿积的关联字段D.指定一个可以消除笛卡儿积的关联条件8.“fromuser_tablesu”中的u是()。A.user_tables的别名B.user_tables的一个字段C.数据表名D.语法错误9.DBMS目前采用的数据模型中最常用的是()模型。A.面向对象B.层次C.网状D.关系ca命令作用是()A.启动数据库配置程序B.配置网络组件C.网络CA认证工具D.启动数据库监听程序11.oracle数据库中的bin_to_num函数的作用是?()A.把二进制数值转换为对应的十进制数值B.把二进制数值转换为对应的十六进制数值C.把二进制数值转换为对应的八进制数值D.把二进制数值转换为对应的浮点数12.oracle数据库中的lower函数的作用是?()A.将字符转换成小写B.将字符转换成大写C.将字符转换成数值D.将数值转换成字符13.oracle数据库中的last_day函数的作用是?()A.返回当前月份的最后一天日期B.返回当前周的最后一天日期C.返回指定日期的当前月份的最后一天日期D.返回指定日期的当前周的最后一天日期14.orderby中desc的作用是()A.查看表结构B.降序C.升序D.以上都不对15.sqlplus/nolog指令的意思是?()A.不进行sqlplus的登录B.sqlplus登录时不进行日志记载C.sqlplus登录时使用用户名密码D.sqlplus登录时不使用用户名密码实现空连接16.下列哪种不是DML语句是()。A.insertB.alterC.updateD.delete17.下面选项中有关连接描述错误的是()A.Innerjoin内连接B.leftjoin左连接C.rightjoin右连接D.outerjion外连接18.在Oracle数据库中,删除一个表,那么对建立在该表上的索引产生的结果是()A.没有影响B.索引同时被删除C.索引失效D.索引中的值为空19.删除表使用的语句是()。A.deletetableB.closetableC.deltableD.droptable20.哪个是按照一定的数据模型组织的、长期存储在计算机内,可为多个用户共享的数据的集合。()A.数据库系统B.数据库C.关系数据库D.数据库管理系统21.在ORACLE中,TRUNCATE命令的作用是()A.删除表B.删除表中全部数据C.删除表中全部列定义D.删除表中全部外键定义22.哪个不是多行子查询的运算符()A.INB.ANYC.>D.ALL23.数据库系统的基础是()。A.数据结构B.数据库管理系统C.操作系统D.数据模型24.系统中有权利启动和关闭数据库的用户是:()。A.hrB.userC.systemD.scott二、判断题25.DML实现对数据的增、删、改、查等操作。()26.DML是数据定义语言。(×)27.数据表名可以修改。()28.数据表是一个二维的数据结构,由字段和对应数据构成数据存储的结构。()29.OracleSQL对标准SQL做了实现及扩展。()30.orderby默认情况下按升序排序。()31.sysdate()函数可以得到系统的当前时间。()32.to_char(x,f)函数把字符串或时间类型x按格式f进行格式化转换为字符串类型。()33.SQL语句中有多个数据表时SQL引擎会按照自左向右的顺序处理from子句后面的数据表。(×)34.INITCAP(列名|表达式):将每个单词的第一个字母转换成大写。()35.多个数据表时from子句后面表名顺序无所谓。(×)36.MONTHS_BETWEEN:返回两个日期类型数据之间间隔的整月数。(×)37.Oracle支持5种类型的约束:notnull、unique、check、primarykey、foreignkey。()38.Oracle数据库中可以对约束进行禁用,禁用约束可以在执行一些特殊操作时候保证操作能正常进行。(×)39.Oracle数据库中字符串和日期必须使用双引号标识。(×)40.oracle数据库系统中,启动数据库的第一步是启动一个数据库实例。()41.SUM和AVG函数分别返回每组的总和及平均值_。()42.为了节省存储空间,定义表时应该将可能包含NULL值的字段放在字段列表的末尾。()43.修改表时,可以指定新添加列的位置。(×)44.单行函数对单行操作,每行返回一个或多个结果。(×)45.使用DELETE语句删除表中的行记录,不能rollback。(×)46.在连接操作中,如果左表和右表中不满足连接条件的数据都出现在结果中,那么这种连接是全外连接_。()47.自然连接是根据两个表中同名的列而进行连接的,当列不同名时,自然连接将失去意义。()47.数据处理的经过4个阶段,即:人工管理阶段、文件系统阶段、数据库系统阶段、大数据系统阶段。(×)48.使用集合运算时列的数据类型、列数可以不一致。(×)49.空值在升序排列中排在最开始,在降序排列中排在最后。(×)50.一个表可以有三个主键。(×)形考任务41.创建一个存储过程,实现在user_tables查询参数给出的表名是否存在,并从存储过程中返回结果。答:创建一个名称为sch的数据表,表结构如表1所示,将表2中的数据插入sch表中。表1:字段名数据类型主键外键非空唯一自增idint(10)是否是是否namevarchar(50)否否是否否glassvarchar(50)否否是否否 表2:idnameglass1xiaomingglass12xiaojunglass2 第一步:创建一个sch表,并向sch表中插入表2中的数据,代码如下:mysql> create table sch-> (-> id int(10),-> name varchar(50),-> glass varchar(50)-> );Query OK, 0 rows affected (0.11 sec)mysql> insert into sch value(1,'xiaoming','glass 1'),-> (2,'xiaojun','glass 2');Query OK, 2 rows affected (0.05 sec)Records: 2 Duplicates: 0 Warnings: 0mysql> desc sch;+-+-+-+-+-+-+| Field | Type | Null | Key | Default | Extra |+-+-+-+-+-+-+| id | int(10) | YES | | NULL | | name | varchar(50) | YES | | NULL | | glass | varchar(50) | YES | | NULL | |+-+-+-+-+-+-+3 rows in set (0.00 sec)· 1· 2· 3· 4· 5· 6· 7· 8· 9· 10· 11· 12· 13· 14· 15· 16· 17· 18· 19· 20· 21· 22通过select * from sch来查看插入表格的内容,SQL 语句如下:idnameglass1xiaomingglass12xiaojunglass2第二步:创建一个存储函数用来统计表sch中的记录数。mysql> create function count_sch()-> returns int-> return (select count(*) from sch);Query OK, 0 rows affected (0.05 sec)mysql> select count_sch();+-+| count_sch() |+-+| 2 |+-+1 row in set (0.00 sec)· 1· 2· 3· 4· 5· 6· 7· 8· 9· 10· 11· 12创建的存储函数名称为count_sch,通过select count_sch()查看函数执行的情况,这个表中只有两条记录,得到的结果也是两条记录,说明函数成功执行。第三步:创建一个存储过程,通过调用存储函数的方法来获取表sch中的记录数和sch表中id的和。创建一个存储过程add_id,同时使用前面创建的存储函数返回表sch中的记录数,计算出表中所有的id之和。代码如下:mysql> delimiter /mysql> create procedure add_id(out count int)-> begin-> declare itmp int;-> declare cur_id cursor for select id from sch;-> declare exit handler for not found close cur_id;-> select count_sch() into count;-> set sum=0;-> open cur_id;-> repeat-> fetch cur_id into itmp;-> if itmp<10-> then set sum= sum+itmp;-> end if;-> until 0 end repeat;-> close cur_id;-> end /Query OK, 0 rows affected (0.06 sec)mysql> select a,sum /+-+-+| a | sum |+-+-+| NULL | NULL |+-+-+1 row in set (0.00 sec)mysql> delimiter ;· 1· 2· 3· 4· 5· 6· 7· 8· 9· 10· 11· 12· 13· 14· 15· 16· 17· 18· 19· 20· 21· 22· 23· 24· 25· 26· 27· 28表sch中只有两条记录,所有id的和为3,和预想的执行结果完全相同。这个存储过程创建了一个cur_id的光标,使用这个光标来获取每条记录的id,使用 repeat 循环语句来实现所有id号相加。几个小问题:(1)MySQL 存储过程和存储函数有什么区别?本质上都是存储程序。函数只能通过return语句返回单个值或表对象;存储过程不允许执行return,但可以通过out参数返回多个值。函数限制比较多,不能用临时表,只能用表变量,还有一些函数都不可用。 存储过程的限制相对就比较少。函数可以嵌sql语句中使用,可以在select语句中作为查询语句中的一个部分调用,而存储过程一般是作为一个独立的部分来执行。(2)存储过程中的代码可以改变吗?· MySQL还不提供对已存在的存储过程代码的修改。如果必须修改存储过程,就必须使用drop语句删除之后再重新编写,或者创建一个新的存储过程。(3)存储过程中可以调用其他存储过程吗?存储过程包含用户定义的sql语句集合,可以使用call语句调用存储过程,当然在存储过程中也可以使用call语句调用其他存储程序,但是不能使用drop语句删除其他存储过程。(4)存储过程的参数不能与数据表中的字段名相同。在定义存储过程参数列表时,应注意把参数名与数据库表中的字段名区别开, 否则将出现无法预期的结果。(5)存储过程的参数可以使用中文吗?一般情况下,可能会出现存储过程中传入中文参数的情况,例如,某个存储过程根据用户的名字查找该用户的信息,传入的参数值可能是中文。这时需要在定义存储过程的时候,在后面加上character set gbk,不然调用存储过程中使用中文参数会出错,比如定义userInfo 、存储过程,代码如下:create procedure useInfo(In u_name varchar(50) character set gbk, out u_age int)形考任务5一、单项选择题1.使用()子句可以筛选分组后的各组数据。A.whereB.groupbyC.orderbyD.having2.“select*fromdba_data_fileswherebytes=max(bytes);”出错原因是()。A.该语句语法正确B.字段bytes不存在C.拼写错误D.分组函数不能使用在where子句中3.子查询不能使用()语句。A.orderbyB.groupbyC.whereD.in4.删除存储过程sp_clu的语法是()。A.dropproceduresp_clu;B.deleteproceduresp_clu;C.afterproceduresp_clu;D.deletesp_clu;5.“updatetab1setname='1234'whereid=1;”修改了()条记录。A.1B.0C.>1D.不确定6.建立数据表的同时使用“check(id=10)”的作用是()。A.建立了检查约束B.指定了字段id的默认值C.指定了字段id的大小D.以上都不对7.数据库约束状态默认是()。A.enablevalidateB.enablenovalidateC.disablevalidateD.disablenovalidate8.事务中触发回滚后()操作会失效。A.deleteB.updateC.insertD.以上皆是9.INTERSECT是()A.交集B.并集重复C.并集不重复D.补集10.MINUS是()A.交集B.并集重复C.并集不重复D.补集11.完全联合运算默认情况下输出()。A.不排序B.升序C.降序D.不确定12.UNION是()A.交集B.并集重复C.并集不重复D.补集13.下列不属于Oracle数据库中的约束条件的是()。A.NOTNULLB.UniqueC.INDEXD.Primarykey14.下列关于提交事务的叙述哪一项是正确的?()A.事务提交后,它对数据库所做的修改将永久保存到数据库中B.事务提交后,还可以使用回滚语句取消它所做的操作C.提交事务的响应速度与事务的规模有关D.提交事务并不意味着事务的结束,它只是对事务以前所做的工作进行保存而已15.关于ROWNUM的描述,下列正确的是()A.ROWNUM是每个表中实际存在的列;B.ROWNUM是每条查询语句执行完成之后,给每行数据填充的行号,行号从0开始;C.ROWNUM做为条件表达式时,可以使用任何算术运算符;D.ROWNUM经常用来做为分页查询。16.函数avg的作用是()A.返回最小值B.返回最大值C.返回平均值D.返回总和17.哪个不是多行子查询的运算符()A.INB.ANYC.>D.ALL18.在ORACLE数据库中创建一个表,对其主键叙述正确的是()A.一个表的主键只能是一列B.一个表可以有多个主键C.联合主键的列数据类型必须一致D.主键必须唯一且不能为空19.在ORACLE中,TRUNCATE命令的作用是()A.删除表B.删除表中全部数据C.删除表中全部列定义D.删除表中全部外键定义20.在oracle中获取前10条的关键字是()A.topB.LimitC.firstD.rownum21.下列哪个约束只能定义在列级定义上()A.UNIQUEB.NOTNULLC.CHECKD.PRIMARYKEYE.FOREIGNKEY22.在Oracle数据库中,删除一个表,那么对建立在该表上的索引产生的结果是()A.没有影响;B.索引同时被删除;C.索引失效;D.索引中的值为空23.函数sum的作用是()A.返回最小值B.返回最大值C.返回平均值D.返回总和24.如下描述正确的是()A.子查询返回记录的条数可以是一条或多条B.<ANY:表示小于子查询结果集中的最小的一个C.>ANY:表示大于子查询结果集中的最大的一个D.以上说法都正确25.对表数据的什么操作不对操作的数据添加锁()A.INSERTB.SELECTC.UPDATED.DELETE二、判断题26.groupby子句减少了重复访问同一个数据块的次数。()27.groupby子句用于配合分组函数,根据一列或多列对结果集进行分组。()28.子查询可以在select、insert、update和delete语句中使用。()29.子查询可以直接用在分组函数中。(×)30.使用集合运算时列的数据类型、列数可以不一致。(×)31.查询语句会先逐条处理然后进行集合运算。()32.insert语句可以不写列名。()33.insert语句可以把查询到的数据插入数据库。()34.非空约束的列在插入数据时必须有值。(×)35.INTERSECT相交运算返回多个查询结果集的公有行。()36.truncate是DDL操作,不能rollback。()37.UNIONALL完全联合运算,返回由任一查询结果集包含的行,并且包含重复行,默认情况下对结果集进行升序排序。(×)38.列级约束只能在一列上起作用。()39.多行子查询需要使用多行操作符,多行操作符包括:IN、ANY、ALL。()40.多行注释以“/*”开始,以“*/”结束。()41.如果在查询中使用了组函数,任何不在组函数中的列或表达式都必须包含在GROUPBY子句中。()42.数据库约束状态有两类。()43.显式游标的游标属性的前缀是游标名。()44.游标分为显式游标和隐式游标。()45.隐式游标由PL/SQL维护,当执行查询时自动打开和关闭。()46.隐式游标的游标属性前缀是SQL。()47.数据表名可以修改。()48.数据表是一个二维的数据结构,由字段和对应数据构成数据存储的结构。()49.数据处理的经过4个阶段,即:人工管理阶段、文件系统阶段、数据库系统阶段、大数据系统阶段。(×)50.子查询用在update语句时必然更新多列。(×)形考任务61.循环语句有哪几种?答:(1)for循环语句for语句的语法格式:for (表达式1;表达式2;表达式3) 若干语句(2)while循环while语句的语法格式:while (表达式) 若干语句(3)do-while循环do-while语句的语法格式:do 若干语句 while(表达式);2.简述SQL可以执行的操作。答:查看数据库:SHOW DATABASES;创建单表:CREATE TABLE single_tbl( id int, name varchar(30), primary key(id);创建一个对目标列(如ID列)使用HASH函数进行拆分的表:CREATE TABLE multi_db_single_tbl( id int auto_increment, name varchar(30), primary key(id) dbpartition by hash(id);查看单表建表语句:SHOW CREATE TABLE single_tbl;查看通过HASH函数进行拆分的表的建表语句:SHOW CREATE TABLE multi_db_single_tbl;删除单表:DROP TABLE single_tbl;删除通过HASH函数进行拆分的表:DROP TABLE multi_db_single_tbl;查看数据库中的所有表:SHOW TABLES;增加列:ALTER TABLE multi_db_single_tbl ADD COLUMN textcol text;修改列的数据类型:ALTER TABLE multi_db_single_tbl MODIFY COLUMN textcol varchar(40);删除列:ALTER TABLE multi_db_single_tbl DROP COLUMN textcol;创建本地索引:CREATE INDEX idx_name ON multi_db_single_tbl (name);ALTER TABLE multi_db_single_tbl ADD INDEX idx_name(name);查看本地索引:SHOW INDEX FROM multi_db_single_tbl;删除本地索引:DROP INDEX idx_name ON multi_db_single_tbl;ALTER TABLE multi_db_single_tbl DROP INDEX idx_name;插入表数据:INSERT INTO multi_db_single_tbl (name) VALUES ('test_name');INSERT INTO multi_db_single_tbl (name) VALUES ('test_name');INSERT INTO multi_db_single_tbl (name) VALUES ('test_name'),('test_namexx');查询表数据:SELECT * FROM multi_db_single_tbl;修改表数据:UPDATE multi_db_single_tbl set name='zzz' WHERE id in (100001,100002,100003,100004);删除表数据:DELETE FROM multi_db_single_tbl WHERE id = 100002;