1、Oracle程序员面试分类模拟9Oracle程序员面试分类模拟9简答题1. 如何判断个存储过程是否正在运行?答案:有两种方式可以判断一个存储过程是否正在运行,其查询SQL语句分别如下,若有结果返回,则说明存储过程正在运行。 方法1: 方法2: 2. 如何将文本文件或Excel中的数据导入数据库?答案:有多种方式可以将文本文件的数据导入到数据库中,例如,利用PLSQL Developer软件进行复制粘贴,利用外部表,利用SQL*Loader等方式。至于Excel中的数据可以另存为csv文件(csv文件其实是逗号分隔的文本文件),然后导入到数据库中。 下面简单介绍一下SQL*Loader的使用方式
2、。 SQL*Loader是一个Oracle工具,能够将数据从外部数据文件装载到数据库中。SQL*Loader必须包含一个控制文件,该控制文件是SQL*Loader的中枢核心,控制文件能够控制外部数据文件中的数据如何映射到Oracle的表和列。通常与SPOOL导出文本数据方法配合使用。SQL*Loader能够接收多种不同格式的数据文件。文件可以存储在磁盘或磁带上,或记录本身可以被嵌套到控制文件中。记录格式可以是定长的或变长的,定长记录是指这样的记录:每条记录具有相同的固定长度,并且每条记录中的数据域也具有相同的固定长度、数据类型和位置。 SQL*Loader的数据导入比较专业,有各种参数及选项可
3、供选择,经常是作为数据仓库中大型数据的导入方法选择。 SQL*Loader的优点: 1)可将导入命令写入BAT文件直接批量处理。 2)导入处理比较专业,提供各种参数选择。 3)无需操作Oracle所在服务器。 SQL*Loader也有缺点,例如,Excel文件需要另存为txt或csv格式才能导入到数据库中。 总的来说这种方法是最值得采用的,可以自动建立操作系统的批处理文件执行SQL*Loader命令,将数据导入原始接收表,并在数据库中设置触发器进行精细操作。 SQL*Loader有两种使用方法: 1)只使用一个控制文件,在这个控制文件中包含数据。 2)使用一个控制文件和一个数据文件。 SQL*
4、Loader工具使用的命令为sqlldr,其常用参数的含义见表1。 下面给出SQL*Loader控制文件的一个示例: 其中,CHARACTERSET指定文件的编码格式,infile指定导入的文件。 接下来就是执行导入命令了,如下: 当要加载的数据文件比较大的时候该如何提高SQL*Loader的性能呢?可以从以下几个方面考虑: 1)ROWS的默认值为64,可以根据需要指定更合适的ROWS参数来指定每次提交记录数。 2)米用DIRECT=TRUE导入可以跳过数据库的相关逻辑,直接将数据导入到数据文件中,可以提高导入数据的性能。 3)通过指定UNRECOVERABLE选项,可以写少量的日志,从而提高
5、数据加载的性能。不过,推荐在加载完成后立即对数据库或至少对表空间备份。 当加载大量数据时,最好抑制日志的产生: 将表修改为NOLOGGING,可以只产生少量的Redo日志,从而提高导入效率。在CONTROL文件中的load data前边加一行:UNRECOVERABLE,此选项必须要与DIRECT共同使用。对于超大数据文件的导入就要用并发操作了,即同时运行多个导入任务: 表2给出在使用SQL*Loader的过程中,一些常用的需求实现方法。 表3给出了在使用SQL*Loader的过程中,常遇到的错误及其解决方法。 关于SQL*Loader还有很多参数本书不再详述,具体可以参考官方文档。有关如何导
6、出数据到Excel中,本书也不再详述。 3. 什么是Quote(q)语法?答案:在SQL查询中,会经常需要原样输出字符串,如果字符串中含有大量的单引号、双引号或者特殊字符,那么需要用单引号转义拼接字符串,这样会非常的麻烦。所以,Oracle提供了一个Q-quote的表达式来原样输出字符串。 需要注意以下几点: 1)Q-quote定界符可以是除了TAB、空格、回车外的任何单字节或多字节字符,包括数字、字母、特殊字符。但&不能作为分隔符,因为&意思是传入参数。 2)Q后跟起始分隔符,起始分隔符后的字符串原样输出,起始分隔符必须有配对的结束分隔符。、(、作为分隔符,必须以、)、结束。 4. 怎么捕获
7、用户登录信息,如SID,IP地址等?答案:可以利用登录触发器来实现。5. 怎么捕获整个数据库的DDL语句或者是说捕获对象结构变化与修改?答案:可以采用DDL触发器进行捕获。6. 怎么捕获表上的DML语句?答案:可以采用DML触发器进行捕获。7. 如何实现分组取前3条记录?答案:可以利用分析函数,如获取每个部门薪水前三名的员工或每个班成绩前三名的学生,如下: 8. 如何把相邻记录合并到一条记录?答案:可以利用分析函数LAG与LEAD,它们可以提取后一条或前一天记录到本记录,如下: 9. 怎么设置存储过程的调用者权限?答案:普通存储过程都是定义者权限,如果想设置调用者权限,那么需要声明“AUTHI
8、D CURRENT_USER”,参考如下语句: 10. Oracle中有哪些常用的字符函数?答案:常用的有如下几个函数: 1)lower(char):将字符串全部转化为小写的格式。 2)upper(char):将字符串全部转化为大写的格式。 3)initcap(SQL course):每个单词的首字母大写,其余变为小写,结果:Sql Course。 4)concat(Hello,World):字符串连接,结果:Hello World。 5)length(char):返回字符串的长度。 6)substr(char,m,n):取字符串的子串,m表示起点,n代表取n个字符的意思。 7)replace
9、(char1,search_string,replace_string):替换函数。 8)instr(char1,char2,n,m):取子串在字符串的位置,特别取某一个特殊字符在原字符串中的位置。 9)trim( Hello World ):前后去掉空格,结果为:“Hello world”。 10)ltrim( Hello World ):左边去掉空格,结果为:“Hello World ”。 11)rtrim( Hello World ):右边去掉空格,结果为:“Hello World”。 12)lpad(salary,10,*):左补齐,结果:*24000。 13)rpad(salary,
10、10,*):右补齐,结果:24000*。 14)chr():将ASCII码转换为字符。 15)ascii():将字符转换为ASCII码。 11. 如何查看存储过程的编译错误?答案:在存储过程编译完成后使用SHOW ERROR命令即可查看。12. 如果查询的列中含有特殊字符,如通配符“%”与“_”,那么该如何查询这些特殊字符?答案:利用ESCAPE来查询,如下: 13. 如何插入单引号到数据库表中?答案:可以用ASCII码处理,其他特殊字符如&也一样,如下: 或者用两个单引号表示一个: 14. 十进制与十六进制如何转换?答案:十进制转换为十六进制用TO_CHAR: 十六进制转换为十进制用TO_N
11、UMBER: 15. 如何随机抽取表SCOTT.EMP的前5条记录?答案:使用SYS_GUID或DBMS_RANDOM.VALUE函数,如下: 16. 如何抽取重复记录?答案:使用ROWID来查询,如下例找出ID重复的记录: 或者,下例找出COL_A和COL_B列重复的记录: 如果想删除重复记录,可以把第一个语句的SELECT替换为DELETE。 17. 怎么快速获得用户下每个表或表分区的记录数?答案:可以分析该用户,然后查询USER_TABLES字典,或者采用脚本实现。18. SYS_CONTEXT和USERENV的用法是什么?它们可以返回哪些常用的值?答案:SYS_CONTEXT函数是Oracle提供的一个获取环境上下文信息的预定义函数。该函数用来返回一个指定NAMESPACE下的PARAMETER值。该函数可以在SQL和PL/SQL语言中使用,常用的扳回信如下: USERENV函数用来返回当前的会话信息,常用的有如下信息:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1