欢迎光临
免费的PDF电子书下载网站

Oracle 11g从入门到精通(第2版) PDF下载

编辑推荐

 ;  ;  ;  ; “软件开发视频大讲堂”丛书系清华社“视频大讲堂”重点大系之一。该大系包括多个子系列,每个子系列的图书在其同品种的图书中销售名列前茅,其中:4个品种荣获“全行业优秀畅销品种”1个品种荣获2012年清华大学出版社“专业畅销书”一等奖绝大多数品种在“全国计算机零售图书排行榜”同品种排行中名列前茅截至目前该大系累计销售超过130万册该大系已成为近年来清华社计算机专业基础类零售图书畅销品牌之一

 ;  ;  ;  ;  ;“软件开发视频大讲堂”系列作为清华社“视频大讲堂”大系的子系列之一,继承和创新了清华社“视频大讲堂”大系的编写模式、写作风格和优良品质。本书突出了以下内容:总长总时长23小时同步视频演示讲解,可反复观摩,让学习更为快捷、高效436个典型实例,通过实例学习更深入,更有趣,更有动力369道面试真题,了解工作实例及面试问题,更好适应企业需求138项能力测试题目,检测是否过关,了解学习之不足。根据全国计算机零售图书排行榜,本书长期在oracle类全国零售排行前列

 ;  ;  ;  ; “软件开发视频大讲堂”系列作为清华社“视频大讲堂”大系的子系列之一,执着于专业,精细于品质。集基础知识、核心技能、高级应用、项目案例于一体好学、好用、高效 ; ;

内容简介

 ;  ;  ; 《Oracle 11g从入门到精通(第2版)》从初学者角度出发,通过通俗易懂的语言,丰富多彩的实例,详细介绍了使用Oracle 11g进行数据管理的各方面技术。全书共分19章,包括Oracle 11g概述,Oracle 11g体系结构,SQL *Plus命令,SQL语言基础,PL/SQL编程,过程、函数、触发器和包,管理控制文件和日志文件,管理表空间和数据文件,数据表对象,其他数据对象,表分区与索引分区,用户管理与权限分配,数据库控制,Oracle系统调优,优化SQL语句,Oracle数据备份与恢复,数据导出和导入,Oracle 11g的闪回技术,企业人事管理系统等。《Oracle 11g从入门到精通(第2版)》所有知识都结合具体实例进行介绍,涉及的程序代码给出了详细的注释,可以使读者轻松领会Oracle 11g管理数据库的精髓,快速提高数据库管理技能。 《Oracle 11g从入门到精通(第2版)》所配DVD光盘含有全程语音视频讲解教学录像以及实例的全部源代码,这些源代码都经过精心调试,在Windows XP、Windows 2003、Windows 7下全部通过。

作者简介

 ;  ;  ; 明日科技,是一家专业从事软件开发、教育培训以及软件开发教育资源整合的高科技公司,其编写的教材既注重选取软件开发中的必需、常用内容,又注重内容的易学、方便以及相关知识的拓展,深受读者喜爱。其编写的图书主要有“软件开发视频大讲堂”“软件开发实战1200例”“软件工程师开发大系”等系列。多次荣获“全行业优秀畅销品种”“中国大学出版社优秀畅销书”等奖项,多个品种长期位居同类图书销售排行榜的前列。

Oracle 11g从入门到精通(第2版) PDF下载

目录


第1篇 ; 基础知识

第1章 ; Oracle 11g概述

 ; 视频讲解:116分钟

1.1 ; 简述Oracle的发展史

1.2 ; 关系型数据库的基本理论

1.2.1 ; 关系型数据库与数据库管理系统

1.2.2 ; 关系型数据库的E-R模型

1.2.3 ; 关系型数据库的设计范式

1.3 ; Oracle 11g的新功能

1.4 ; Oracle 11g的安装与卸载

1.4.1 ; Oracle 11g的安装

1.4.2 ; Oracle 11g的卸载

1.5 ; Oracle 11g的管理工具

1.5.1 ; SQL*Plus工具

1.5.2 ; Oracle企业管理器

1.5.3 ; 数据库配置助手

1.6 ; 启动与关闭数据库实例

1.6.1 ; 启动数据库实例

1.6.2 ; 关闭数据库实例

1.7 ; 小结

1.8 ; 实践与练习

 ;

第2章 ; Oracle 11g体系结构

 ; 视频讲解:89分钟

2.1 ; Oracle 11g体系结构概述

2.2 ; 逻辑存储结构

2.2.1 ; 数据块(Data Blocks)

2.2.2 ; 数据区(Extent)

2.2.3 ; 段(Segment)

2.2.4 ; 表空间(TableSpace)

2.3 ; 物理存储结构

2.3.1 ; 数据文件

2.3.2 ; 控制文件

2.3.3 ; 日志文件

2.3.4 ; 服务器参数文件

2.3.5 ; 密码文件、警告文件和跟踪文件

2.4 ; Oracle 11g服务器结构

2.4.1 ; 系统全局区(SGA)

2.4.2 ; 程序全局区(PGA)

2.4.3 ; 前台进程

2.4.4 ; 后台进程

2.5 ; 数据字典

2.5.1 ; Oracle数据字典简介

2.5.2 ; Oracle常用数据字典

2.6 ; 小结

2.7 ; 实践与练习

 ;

第3章 ; SQL*Plus命令

 ; 视频讲解:71分钟

3.1 ; SQL*Plus与数据库的交互

3.2 ; 设置SQL*Plus的运行环境

3.2.1 ; 简介SET命令

3.2.2 ; 使用SET命令设置运行环境

3.3 ; 常用SQL*Plus命令

3.3.1 ; HELP命令

3.3.2 ; DESCRIBE命令

3.3.3 ; SPOOL命令

3.3.4 ; 其他常用命令

3.4 ; 格式化查询结果

3.4.1 ; COLUMN命令

3.4.2 ; TTITLE和BTITLE命令

3.5 ; 小结

3.6 ; 实践与练习

 ;

第4章 ; SQL语言基础

 ; 视频讲解:189分钟

4.1 ; SQL语言简介

4.1.1 ; SQL语言的特点

4.1.2 ; SQL语言的分类

4.1.3 ; SQL语言的编写规则

4.2 ; 用户模式

4.2.1 ; 模式与模式对象

4.2.2 ; 示例模式SCOTT

4.3 ; 检索数据

4.3.1 ; 简单查询

4.3.2 ; 筛选查询

4.3.3 ; 分组查询

4.3.4 ; 排序查询

4.3.5 ; 多表关联查询

4.4  Oracle常用系统函数

4.4.1  字符类函数

4.4.2  数字类函数

4.4.3  日期和时间类函数

4.4.4  转换类函数

4.4.5  聚合类函数

4.5  子查询的用法

4.5.1  什么是子查询

4.5.2  单行子查询

4.5.3  多行子查询

4.5.4  关联子查询

4.6  操作数据库

4.6.1  插入数据(INSERT语句)

4.6.2  更新数据(UPDATE语句)

4.6.3  删除数据(DELETE语句和TRUNCATE语句)

4.7  小结

4.8  实践与练习

 

第5章  PL/SQL编程

  视频讲解:102分钟

5.1  PL/SQL简介

5.1.1  PL/SQL块结构

5.1.2  代码注释和标示符

5.1.3  文本

5.2  数据类型、变量和常量

5.2.1  基本数据类型

5.2.2  特殊数据类型

5.2.3  定义变量和常量

5.2.4  PL/SQL表达式

5.3  流程控制语句

5.3.1  选择语句

5.3.2  循环语句

5.4  PL/SQL游标

5.4.1  基本原理

5.4.2  显式游标

5.4.3  隐式游标

5.4.4  游标的属性

5.4.5  游标变量

5.4.6  通过for语句循环游标

5.5  PL/SQL异常处理

5.5.1  异常处理方法

5.5.2  异常处理语法

5.5.3  预定义异常

5.5.4  自定义异常

5.6  小结

5.7  实践与练习

 

第6章  过程、函数、触发器和包

  视频讲解:97分钟

6.1  存储过程

6.1.1  创建存储过程

6.1.2  存储过程的参数

6.1.3  IN参数的默认值

6.1.4  删除存储过程

6.2  函数

6.2.1  创建函数

6.2.2  调用函数

6.2.3  删除函数

6.3  触发器

6.3.1  触发器简介

6.3.2  语句级触发器

6.3.3  行级别触发器

6.3.4  替换触发器

6.3.5  用户事件触发器

6.3.6  删除触发器

6.4  程序包

6.4.1  程序包的规范

6.4.2  程序包的主体

6.4.3  删除包

6.5  小结

6.6  实践与练习

 

第2篇  核心技术

第7章  管理控制文件和日志文件

  视频讲解:77分钟

7.1  管理控制文件

7.1.1  控制文件简介

7.1.2  控制文件的多路复用

7.1.3  创建控制文件

7.1.4  备份和恢复控制文件

7.1.5  删除控制文件

7.1.6  查询控制文件的信息

7.2  管理重做日志文件

7.2.1  重做日志文件概述

7.2.2  增加日志组及其成员

7.2.3  删除重做日志文件

7.2.4  更改重做日志文件的位置或名称

7.2.5  查看重做日志信息

7.3  管理归档日志文件

7.3.1  日志模式分类

7.3.2  管理归档操作

7.3.3  设置归档文件位置

7.3.4  查看归档日志信息

7.4  小结

7.5  实践与练习

 

第8章  管理表空间和数据文件

  视频讲解:57分钟

8.1  表空间与数据文件的关系

8.2  Oracle 11g的默认表空间

8.2.1  SYSTEM表空间

8.2.2  SYSAUX表空间

8.3  创建表空间

8.3.1  创建表空间的语法

8.3.2  通过本地化管理方式创建表空间

8.3.3  通过段空间管理方式创建表空间

8.3.4  创建非标准块表空间

8.3.5  建立大文件表空间

8.4  维护表空间与数据文件

8.4.1  设置默认表空间

8.4.2  更改表空间的状态

8.4.3  重命名表空间

8.4.4  删除表空间

8.4.5  维护表空间中的数据文件

8.5  管理撤销表空间

8.5.1  撤销表空间的作用

8.5.2  撤销表空间的初始化参数

8.5.3  撤销表空间的基本操作

8.6  管理临时表空间

8.6.1  临时表空间简介

8.6.2  创建临时表空间

8.6.3  查询临时表空间的信息

8.6.4  关于临时表空间组

8.7  小结

8.8  实践与练习

 

第9章  数据表对象

  视频讲解:71分钟

9.1  数据表概述

9.2  创建数据表

9.2.1  数据表的逻辑结构

9.2.2  创建一个数据表

9.2.3  数据表的特性

9.3  维护数据表

9.3.1  增加和删除字段

9.3.2  修改字段

9.3.3  重命名表

9.3.4  改变表空间和存储参数

9.3.5  删除表

9.3.6  修改表的状态

9.4  数据完整性和约束性

9.4.1  非空约束

9.4.2  主键约束

9.4.3  唯一性约束

9.4.4  外键约束

9.4.5  禁用和激活约束

9.4.6  删除约束

9.5  小结

9.6  实践与练习

 

第10章  其他数据对象

  视频讲解:56分钟

10.1  索引对象

10.1.1  索引概述

10.1.2  创建索引

10.1.3  修改索引

10.1.4  删除索引

10.1.5  显示索引信息

10.2  视图对象

10.2.1  创建视图

10.2.2  管理视图

10.3  同义词对象

10.4  序列对象

10.4.1  创建序列

10.4.2  管理序列

10.5  小结

10.6  实践与练习

 

第11章  表分区与索引分区

  视频讲解:47分钟

11.1  分区技术简介

11.2  创建表分区

11.2.1  范围分区

11.2.2  散列分区

11.2.3  列表分区

11.2.4  组合分区

11.2.5  Interval分区

11.3  表分区策略

11.4  管理表分区

11.4.1  添加表分区

11.4.2  合并分区

11.4.3  删除分区

11.4.4  并入分区

11.5  创建索引分区

11.5.1  索引分区概述

11.5.2  本地索引分区

11.5.3  全局索引分区

11.6  管理索引分区

11.6.1  索引分区管理的操作列表

11.6.2  索引分区管理的实际操作

11.7  小结

11.8  实践与练习

 

第12章  用户管理与权限分配

  视频讲解:49分钟

12.1  用户与模式的关系

12.2  创建与管理用户

12.2.1  身份验证

12.2.2  创建用户

12.2.3  修改用户

12.2.4  删除用户

12.3  用户权限管理

12.3.1  权限简介

12.3.2  授权操作

12.3.3  回收系统权限

12.3.4  对象授权

12.3.5  回收对象权限

12.3.6  查询用户与权限

12.4  角色管理

12.4.1  角色简介

12.4.2  预定义角色

12.4.3  创建角色与授权

12.4.4  管理角色

12.4.5  角色与权限的查询

12.5  资源配置PROFILE

12.5.1  PROFILE简介

12.5.2  使用PROFILE管理密码

12.5.3  使用PROFILE管理资源

12.5.4  维护PROFILE文件

12.5.5  显示PROFILE信息

12.6  小结

12.7  实践与练习

 

第3篇  高级应用

第13章  数据库控制

  视频讲解:19分钟

13.1  用事务控制操作

13.1.1  事务的概述

13.1.2  操作事务

13.2  用锁控制并发存取

13.2.1  并发控制

13.2.2  为何加锁

13.2.3  加锁的方法

13.3  死锁

13.3.1  死锁的产生

13.3.2  死锁的预防

13.4  小结

13.5  实践与练习

 

第14章 Oracle系统调优

  视频讲解:29分钟

14.1  调整初始化参数

14.1.1  Oracle初始化参数分类

14.1.2  主要系统调优参数介绍

14.2  系统全局区(SGA)优化

14.2.1  理解内存分配

14.2.2  调整日志缓冲区

14.2.3  调整共享池

14.2.4  调整数据库缓冲区

14.2.5  SGA调优建议

14.3  排序区优化

14.3.1  排序区与其他内存区的关系

14.3.2  理解排序活动

14.3.3  专用模式下排序区的调整

14.3.4  共享模式下排序区的调整

14.4  小结

14.5  实践与练习

 

第15章  优化SQL语句

  视频讲解:27分钟

15.1  常规SQL语句优化

15.1.1  建议不用“*”来代替所有列名

15.1.2  用TRUNCATE代替DELETE

15.1.3  在确保完整性的情况下多用COMMIT语句

15.1.4  尽量减少表的查询次数

15.1.5  用[NOT] EXISTS代替[NOT] IN

15.2  表连接优化

15.2.1  驱动表的选择

15.2.2  WHERE子句的连接顺序

15.3  合理使用索引

15.3.1  何时使用索引

15.3.2  索引列和表达式的选择

15.3.3  选择复合索引主列

15.3.4  避免全表扫描大表

15.3.5  监视索引是否被使用

15.4  优化器的使用

15.4.1  优化器的概念

15.4.2  运行EXPLAIN PLAN

15.4.3  Oracle 11g中SQL执行计划的管理

15.5  数据库和SQL重演

15.5.1  数据库重演

15.5.2  SQL重演

15.6  Oracle的性能顾问

15.6.1  SQL调优顾问

15.6.2  SQL访问顾问

15.7  小结

15.8  实践与练习

 

第16章  Oracle数据备份与恢复

  视频讲解:45分钟

16.1  备份与恢复概述

16.2  RMAN工具简介

16.2.1  RMAN的优点

16.2.2  RMAN组件

16.2.3  RMAN通道

16.2.4  RMAN命令

16.3  使用RMAN工具备份

16.3.1  RMAN备份策略

16.3.2  使用RMAN备份数据库文件和归档日志

16.3.3  增量备份

16.4  使用RMAN工具完全恢复

16.4.1  恢复处于NOARCHIVELOG模式的数据库

16.4.2  恢复处于ARCHIVELOG模式的数据库

16.5  使用RMAN工具部分恢复

16.5.1  基于时间的不完全恢复

16.5.2  基于更改的不完全恢复

16.6  小结

16.7  实践与练习

 

第17章  数据导出和导入

  视频讲解:41分钟

17.1  EXPDP和IMPDP概述

17.2  EXPDP导出数据

17.2.1  执行EXPDP命令

17.2.2  EXPDP命令参数

17.3  IMPDP导入数据

17.3.1  执行IMPDP命令

17.3.2  IMPDP命令参数

17.4  SQL* Loader工具

17.4.1  SQL* Loader概述

17.4.2  加载数据

17.5  小结

17.6  实践与练习

 

第18章  Oracle 11g的闪回技术

  视频讲解:30分钟

18.1  闪回技术简介

18.2  闪回数据库

18.2.1  闪回恢复区

18.2.2  闪回数据库配置

18.2.3  闪回数据库技术应用

18.3  闪回表

18.3.1  闪回表命令的语法

18.3.2  闪回表的应用

18.4  闪回丢弃

18.4.1  回收站简介

18.4.2  回收站的应用

18.5  其他闪回技术

18.5.1  闪回版本查询

18.5.2  闪回事务查询

18.5.3  闪回数据归档

18.6  小结

18.7  实践与练习

 

第4篇  项目实战

第19章  企业人事管理系统

  视频讲解:172分钟

19.1  开发背景

19.2  系统分析

19.3  系统设计

19.3.1  系统目标

19.3.2  系统功能结构

19.3.3  系统预览

19.3.4  业务流程图

19.3.5  文件夹结构设计

19.4  数据库设计

19.4.1  数据库分析

19.4.2  数据库概念设计

19.4.3  数据库逻辑结构设计

19.5  主窗体设计

19.5.1  导航栏的设计

19.5.2  工具栏的设计

19.6  公共模块设计

19.6.1  编写Hibernate配置文件

19.6.2  编写Hibernate持久化类和映射文件

19.6.3  编写通过Hibernate操作持久化对象的常用方法

19.6.4  创建用于特殊效果的部门树对话框

19.6.5  创建通过部门树选取员工的面板和对话框

19.7  人事管理模块设计

19.7.1  人事管理模块功能概述

19.7.2  人事管理模块技术分析

19.7.3  人事管理模块实现过程

19.8  待遇管理模块设计

19.8.1  待遇管理模块功能概述

19.8.2  待遇管理模块技术分析

19.8.3  待遇管理模块实现过程

19.9  系统维护模块设计

19.9.1  系统维护模块功能概述

19.9.2  系统维护模块技术分析

19.9.3  系统维护模块实现过程

19.10  Hibernate关联关系的建立方法

19.10.1  建立一对一关联

19.10.2  建立一对多关联

19.11  小结

 

 


媒体评论

评论

前沿

        丛书说明:“软件开发视频大讲堂”丛书(第1版)于2008年8月出版,因其编写细腻,易学实用,配备全程视频等,在软件开发类图书市场上产生了很大反响,绝大部分品种在全国软件开发零售图书排行榜中名列前茅,2009年多个品种被评为“全国优秀畅销书”。“软件开发视频大讲堂”丛书(第2版)于2010年8月出版,出版后,绝大部分品种在全国软件开发类零售图书排行榜中依然名列前茅。丛书中多个品种被百余所高校计算机相关专业、软件学院选为教学参考书,在众多的软件开发类图书中成为最耀眼的品牌之一。丛书累计销售40多万册。“软件开发视频大讲堂”丛书(第3版)于2012年8月出版,根据读者需要,增删了品种,重新录制了视频,提供了从“入门学习→实例应用→模块开发→项目开发→能力测试→面试”等各个阶段的海量开发资源库。因丛书编写结构合理、实例选择经典实用,丛书迄今累计销售90多万册。“软件开发视频大讲堂”丛书(第4版)在继承前3版所有优点的基础上,修正了前3版图书中发现的疏漏之处,并结合目前市场需要,进一步对丛书品种进行了完善,对相关内容进行了更新优化,使之更适合读者学习,为了方便教学,还提供了教学课件PPT。Oracle数据库系统是美国Oracle公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(Client/Server)或B/S体系结构的数据库之一。Oracle数据库是目前世界上使用最为广泛的数据库管理系统之一,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库,它实现了分布式处理功能。关于Oracle的所有知识,只要在一种机型上学习后,便能在各种类型的机器上使用。

免费在线读

11.1  分区技术简介  视频讲解:光盘TMlx11分区技术简介.exeOracle是最早支持物理分区的数据库管理系统供应商,表分区的功能是在Oracle 8.0版本推出的。分区功能能够改善应用程序的性能、可管理性和可用性,是数据库管理中一个非常关键的技术。尤其在今天,数据库应用系统的规模越来越大,还有海量数据的数据仓储系统,因此,几乎所有的Oracle数据库都使用分区功能来提高查询的性能,并且简化数据库的日常管理维护工作。那么使用分区技术有哪些优点呢?具体如下:? 减少维护工作量,独立管理每个分区比管理单个大表要轻松得多。? 增强数据库的可用性,如果表的一个或几个分区由于系统故障不能使用,而表其余的分区仍然可以使用;如果系统故障只影响表的一部分分区,那么,只有这部分分区需要修复,这就比修复整个大表耗费的时间少许多。? 均衡I/O,减少竞争,通过把表的不同分区分配到不同的磁盘来平衡I/O改善性能。? 分区对用户保持透明,最终用户感觉不到分区的存在。? 提高查询速度:对大表的查询、增加、修改等操作可以分解到表的不同分区中来并行执行,这样就可以加快运行速度,对数据仓库的TP查询尤其有用。Oracle 11g相对于其他低版本的Oracle在分区方面增加了很多功能,具体如下:? 引入扩展的分区功能。? Interval分区。? 外键分区。? 虚拟列分区。? 引入了分区建议器。分区技术主要包括表分区和索引分区,接下来将对这两方面的内容进行详细讲解。11.2  创建表分区  视频讲解:光盘TMlx11创建表分区.exe上面介绍了分区技术的优点以及Oracle 11g在分区方面所增加的新功能,本节主要对各种表分区的方法进行详细介绍并举例加以说明。11.2.1  范围分区创建范围分区的关键字是RANGE,创建该分区后,其中的数据可以根据分区键值指定的范围进行分布,当数据在范围内均匀分布时,性能最好。例如,如果选择一个日期列作为分区键,分区“AUG-2011”就会包括所有从01-AUG-2011到31-AUG-2011之间的分区键值(假设分区的范围是从该月的第一天到该月的最后一天)。当表结构采用范围分区时,首先要考虑分区的列应该符合范围分区的方法;其次要考虑列的数据值的取值范围;最后考虑列的边界问题,下面通过若干具体实例来演示范围分区的创建。【例11.1】 创建一个商品零售表,然后为该表按照销售日期所在的季度创建4个分区,代码及运行结果如下(实例位置:光盘TMsl111)。
SQL> create table ware_retail_part --创建一个描述商品零售的数据表  2  (  3    id integer primary key, --销售编号  4    retail_date date, --销售日期  5    ware_name varchar2(50) --商品名称  6  )  7  partition by range(retail_date)  8  (  9    --2011年第一个季度为par_01分区 10    partition par_01 values less than(to_date(2011-04-01,yyyy-mm-dd)) tablespace TBSP_1, 11    --2011年第二个季度为par_02分区 12    partition par_02 values less than(to_date(2011-07-01,yyyy-mm-dd)) tablespace TBSP_1, 13    --2011年第三个季度为par_03分区 14    partition par_03 values less than(to_date(2011-10-01,yyyy-mm-dd)) tablespace TBSP_2, 15    --2011年第四个季度为par_04分区 16    partition par_04 values less than(to_date(2012-01-01,yyyy-mm-dd)) tablespace TBSP_2 17  );
表已创建。
在为商品零售表ware_retail_part创建了4个范围分区之后,下面向该表中插入若干条记录。【例11.2】 向表ware_retail_part插入3条记录,代码及运行结果如下。
SQL> insert into ware_retail_part values(1,to_date(2011-01-20,yyyy-mm-dd),平板电脑);
已创建 1 行。
SQL> insert into ware_retail_part values(2,to_date(2011-04-15,yyyy-mm-dd),s智能手机);
已创建 1 行。
SQL> insert into ware_retail_part values(3,to_date(2011-07-25,yyyy-mm-dd),sMP5);
已创建 1 行。
在向ware_retail_part表中插入若干条记录之后,用户就可以通过分区表(即进行了分区的数据表)来查询数据了,这种方式的查询速度要比从整个表中查询快得多,使用分区表查看数据的例子如下。

Oracle 11g从入门到精通(第2版) pdf下载声明

本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版

pdf下载地址

版权归出版社和作者所有,下载链接已删除。如果喜欢,请购买正版!

链接地址:Oracle 11g从入门到精通(第2版)