1.Oracle中function和procedure的区别?

function为函数,procedure为存储过程。

  1. 可以理解函数是存储过程的一种
  2. 函数可以没有参数,但是一定需要一个返回值,存储过程可以没有参数,不需要返回值
  3. 函数return返回值没有返回参数模式,存储过程通过out参数返回值, 如果需要返回多个参数则建议使用存储过程
  4. 在sql数据操纵语句中只能调用函数而不能调用存储过程

2.Oracle的导入导出有几种方式,有何区别?

使用PLSQL相关工具

dmp文件方式

​ dmp文件是二进制的,可以跨平台,并且包含权限,支持大字段数据,是用的最广泛的一种。

sql文件方式

​ SQL文件可用文本编辑器查看,有利于可读性,但效率不如dmp文件,适合小数据量导入导出。尤其注意的是表中不能有大字段 (blob,clob,long)

pde文件

​ pde格式是PL/SQL 自带的文件格式,适用于PL/SQL工具,编辑器无法查看。

使用Oracle工具

​ 使用Oracle工具exp/imp

3.怎样优化Oracle数据库,有几种方式?

数据库性能最关键的因素在于I/O,优化数据库最关键的问题在于减少磁盘的I/O,优化Oracle可以分为物理和逻辑两个方面。

物理优化:
  1. oracle的运行环境
  2. 使用合适的优化器
  3. 合理配置oracle实力参数
  4. 建立合适的索引,减少IO
  5. 建立表分区
逻辑优化
  1. 对表进行逻辑分割
  2. 对sql语句进行优化

4.Oracle中字符串用什么符号链接?

  1. 使用符号“||”

    SELECT '工号为'||FNumber || '的员工姓名为' || FName FROM T_Employee
    WHERE FName IS NOT NULL 
    
  2. 使用CONCAT()函数进行拼接,Oracle中的concat函数仅支持两个字符串进行拼接,如果要再多,可以嵌套使用。

    SELECT CONCAT('工号:',FNumber) FROM T_Employee 
    

5.Oracle分区是怎样优化数据库的?

Oracle的分区可以分为:列表分区、范围分区、散列分区、复合分区。

  1. 增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍可以使用;
  2. 减少关闭时间:如果系统故障只影响表的一部份分区,那么只有这部份分区需要修复,可能比整个大表修复花的时间更少;
  3. 维护轻松:如果需要得建表,独产管理每个公区比管理单个大表要轻松得多;
  4. 均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能;
  5. 改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快
  6. 分区对用户透明,最终用户感觉不到分区的存在。

6.Oracle是怎样分页的?

Oracle中使用rownum来进行分页, 这个是效率最好的分页方法,hibernate也是使用rownum来进行oralce分页的

select * from 
  ( select rownum r,a from tabName where rownum <= 20 ) 
where r > 10

7.Oralce怎样存储文件,能够存储哪些文件?

Oracle 能存储 clob、nclob、 blob、 bfile
Clob 可变长度的字符型数据,也就是其他数据库中提到的文本型数据类型
Nclob 可变字符类型的数据,不过其存储的是Unicode字符集的字符数据
Blob 可变长度的二进制数据
Bfile 数据库外面存储的可变二进制数据

8.比较truncate和delete命令 ?

  1. Truncate 和delete都可以将数据实体删掉,truncate 的操作并不记录到 rollback日志,所以操作速度较快,但同时这个数据不能恢复
  2. Delete操作不腾出表空间的空间
  3. Truncate 不能对视图等进行删除
  4. Truncate是数据定义语言(DDL),而delete是数据操纵语言(DML)

9.简述oracle中 dml、ddl、dcl的使用

DML(Data Manipulation Language,数据操作语言):用于检索或者修改数据。

DML包括:

​ SELECT:用于检索数据;

​ INSERT:用于增加数据到数据库;

​ UPDATE:用于从数据库中修改现存的数据

​ DELETE:用于从数据库中删除数据。

DDL(Data Definition Language,数据定义语言): 用于定义数据的结构,比如 创建、修改或者删除数据库对象。

DDL包括:DDL语句可以用于创建用户和重建数据库对象。下面是DDL命令:

​ CREATE 创建

​ ALTER 修改

​ DROP 删除

DCL(Data Control Language,数据控制语言):用于定义数据库用户的权限。

DCL包括:

GRANT  授权 

  REVOKE  回收权限 

  deny   拒绝授予主体权限。防止主体通过其组或角色成员身份继承权限 

10.说说oracle中的经常使用到得函数

1)数字函数

​ NVL( string1, replace_with) :如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。

​ SIGN(n) :该函数用于检测数字的正负.如果数字n小于0,则函数的返回值位-1;如果数字n的值等于0,则函数的返回值等于0,如果数字n大于0,则函数的返回值等于1。

​ CEIL(n) :该函数用于返回大于等于数字n的最小整数。

​ FLOOR(n):该函数用于返回小于等于数字n的最大整数。

​ MOD(m,n) :该函数用于返回两个数字相除后的余数.如果数字n为0,则返回结果为m。

​ ROUND(n,[m]) :该函数用于执行四舍五入运算;如果省略m,则四舍五入至整数位;如果m是负数,则四舍五入到小数点前m位;如果m是整数,则四舍五入至小数点后m位。

​ TRUNC(n,[m]) :该函数用于截取数字。如果省略数字m,则将数字n的小数部分截去;如果数字m是正数,则将数字n截取到小数点后的第m位;如果数字m是负数,则将数字n截取到小数点前m位。

2)字符函数

​ TRIM([ { { LEADING | TRAILING | BOTH },截取特定字符串。

​ ASCII(char):该函数用于返回字符串首字符的ASCII值。

​ CHR(char) :该函数用于将ASCII码值转变为字符。

​ CONCAT:该函数用于连接字符串,其作用于连接操作符(||)完全相同。

​ LENGTH(char):该函数用于返回字符串的长度,如果字符串的类型为CHAR,则其长度包括所有的后缀空格:如果char是null,则返回null。

3)日期时间函数

​ ADD_MONTHS(d,n):该函数用于返回特定日期时间 d 之后(或之前)的n个月所对应的日期时间(n为正整数表示之后,n为负整数表示之前)。

​ TRUNC(d,[fmt]) :该函数用于截取日期时间数据.如果fmt指定年度,则结果为本年度的1月1日;如果fmt指定月,则结果为本月1日。

​ MOTNS_BETWEEN(d1,d2):该函数用于返回d1和d2之间相差的月数.如果d1小于d2,则返回负数;如果d1和d2的天数相同,或都是月底,则返回整数;否则Oracle以每月31天为准来计算结果的小数部分。

​ NEXT_DAY(d,char):该函数用于返回指定日期后的第一个工作日(由char指定)所对应的日期。

4)转换函数

​ TO_CHAR(data[,fmt[,nls_param]]) :该函数用于将日期值转变为字符串,其中fmt用于指定日期格式,nls_param用于指定nls参数。

​ TO_CHAR(n[,fmt[,nls_param]]):用于将数字值转换为VARCHAR2数据类型。

​ TO_DATE(char[,fmt[,nls_param]]):该函数用于将符合指定日期的函数转变为DATE类型的数值。

5)解码函数

​ DECODE函数为Oracle专属。

DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )

11.怎样创建一个存储过程, 游标在存储过程怎么使用, 有什么好处?

创建存储过程
CREATE PROCEDURE user ()

BEGIN -- 定义变量

DECLARE i INT DEFAULT 100000;
DECLARE p_telphone VARCHAR(20);
DECLARE p_username VARCHAR(20);
DECLARE p_authcode VARCHAR(20);
DECLARE p_card VARCHAR(20);
DECLARE p_password VARCHAR(20);
WHILE i < 150000 DO

-- 对参数赋值
SET p_telphone = CONCAT('15410',i);
SET p_username = CONCAT('张',i);
SET p_authcode = CONCAT('',i);
SET p_card = CONCAT('SN000',i);
SET p_password = CONCAT('hnjb',i);

-- 创建数据
INSERT INTO user ( telphone, username, authcode, card, password ) VALUES ( p_telphone, p_username, p_authcode, p_card, p_password );
SET i=i+1;
END WHILE;
END
如何使用游标
  1. oracle中的游标分为显示游标和隐式游标
  2. 显示游标是用cursor…is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理;隐式游标是在执行插入 (insert)、删除(delete)、修改(update)和返回单条记录的查询(select)语句时由PL/SQL自动定义的。
  3. 显式游标的操作:打开游标、操作游标、关闭游标;PL/SQL隐式地打开SQL游标,并在它内部处理SQL语句,然后关闭它
使用游标好处
  1. 使用游标可以执行多个不相关的操作.如果希望当产生了结果集后,对结果集中的数据进行多种不相关的数据操作 。
  2. 使用游标可以提供脚本的可读性 。
  3. 使用游标可以建立命令字符串,使用游标可以传送表名,或者把变量传送到参数中,以便建立可以执行的命令字符串。
  4. 存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
  5. 可保证数据的安全性和完整性。
  6. 通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。
  7. 通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。 再运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。 由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。
  8. 可以降低网络的通信量, 不需要通过网络来传送很多sql语句到数据库服务器了 ,使体现企业规则的运算程序放入数据库服务器中,以便集中控制

12.怎样创建一个索引,索引使用的原则,有什么优点和缺点 ,怎样创建一个视图,视图的好处, 视图可以控制权限吗?

索引

创建索引的方法:

创建标准索引: 
CREATE  INDEX 索引名 ON 表名 (列名)  TABLESPACE 表空间名; 
创建唯一索引: 
CREATE unique INDEX 索引名 ON 表名 (列名)  TABLESPACE 表空间名; 
创建组合索引: 
CREATE INDEX 索引名 ON 表名 (列名1,列名2)  TABLESPACE 表空间名; 
创建反向键索引: 
CREATE INDEX 索引名 ON 表名 (列名) reverse TABLESPACE 表空间名; 

索引使用的原则:

  1. 搜索的索引列
    要建索引的列不一定是所要结果的列,简单的说就是where条件中出现的列需要索引,或者链接子句用到的列需要索引,而只在select中出现的列不需要索引。

  2. 使用唯一索引
    考虑某列中值的分布,索引列的基数越大越好,例如存放出生日期的列具有不同的值,很容易区分各行;而存放性别的列,只有两个值,所以对这种列加索引也没有什么价值,不管搜哪个值,都是大约一半的数据量。

  3. 使用短索引
    如果对字符串列进行索引,应该指定一个前缀长度,只要有可能就应该这样做。例如,有一个char(200)的列,如果前10~20个字符内,多数值是唯一的,那么就不要对整个列进行索引(时刻考虑对资源的占用问题)

  4. 利用最左前缀
    在创建一个n列的索引时,实际是创建了mysql可利用的n个索引。多列索引可以起几个索引的作用,因为可以利用索引中最左边的列集来匹配行。这样的列集称为最左前缀。

  5. 不要过度索引

什么列都建索引是错误的,比如从来都不查询的列,建上索引后一次也不用没什么价值,反而占用了额外的资源。

索引的优点:

  1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

  2. 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。

  3. 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

  4. 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

  5. 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

索引的缺点:

  1. 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

  2. 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。

  3. 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

视图

创建视图的方法:

create view vw_emp_simple2 as 
select eno, ename ,job from tb_emp;

创建视图的好处:

  1. 视图可以简化用户的操作;
  2. 视图使用户能够多角度看待同一数据;
  3. 视图对重构数据库提供了一定程度的逻辑独立性;
  4. 视图能够对机密数据提供安全保护
  5. 适当利用视图可以更清晰地表达查询

视图可以控制权限吗:

​ 可以控制权限的,在使用的时候需要将视图的使用权限grant给用户

13.oracle创建表的几种方式;应该注意些什么

建表方式:
  1. 完全新建一张表;

    create table emp(id integer)tablespace CICI;
    
  2. 在原有表的基础上新建一张表;

    CREATE TABLE EMP_TEMP TABLESPACE CICI AS( SELECT * FROM EMP) ;
    
注意事项:
  1. 表名和字段名的命名规则:必须以字母开头,可以含符号A-Z,a-z,0-9,_,$,#
  2. 大小写不区分
  3. 不用SQL里的保留字, 一定要用时可用双引号把字符串括起来.
  4. 用和实体或属性相关的英文符号长度有一定的限制
  5. 建表时可以用中文的字段名, 但最好还是用英文的字段名
  6. 创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面
  7. 建表时如果有唯一关键字或者唯一的约束条件,建表时自动建了索引
  8. 一个表的最多字段个数也是有限制的,254个.

14.怎样将一个旧数据库数据移到一个新的数据库

  1. 在旧数据库中,进入emap库查询默认表空间和临时表空间。
  2. 进入新库,创建表空间。
  3. 在新库创建用户和数据库
  4. 从旧库里备份数据
  5. 将备份的dump文件导入新库
Logo

华为云1024程序员节送福利,参与活动赢单人4000元礼包,更有热门技术干货免费学习

更多推荐