♣ 题目部分 在Oracle中,简述Oracle中的游标。 ♣ 答案部分 在介绍游标之前先介绍一下Oracle数据库中库缓存(Library Cache)的作用及其组成结构。...库缓存是SGA中共享池(Shared Pool)中的一块内存区域,主要作用就是缓存执行过的SQL语句和PL/SQL语句(例如存储过程、函数、包、触发器)及其所对应的解析树(Parse Tree)和执行计划等信息...当同样的SQL语句和PL/SQL语句再次被执行的时候就可以直接利用已经缓存在库缓存中的那些相关对象而无须再次从头开始解析,这样就提高了这些SQL语句和PL/SQL语句在重复执行时的执行效率。...库缓存(Library Cache)在SGA中的位置如下图所示: ?...当Oracle要执行目标SQL“select * from lhr.emp”时,首先会对该SQL的SQL文本进行哈希运算,然后根据得到的哈希值找到相关的Hash Bucket,在Hash Bucket中遍历对应的库缓存对象句柄链表
♣ 题目部分 在Oracle中,游标有哪几类?...Oracle在解析目标SQL时去库缓存中查找匹配Shared Cursor的过程如下图所示: ?...从上图可以看出,Oracle在解析目标SQL时去库缓存中查找匹配共享游标(Shared Cursor)的过程包含如下几个步骤: (1)根据目标SQL的SQL文本的哈希值去库缓存中查找匹配的Hash Bucket...(3)在步骤(2)中,如果找到了匹配的父游标,那么Oracle接下来就会遍历从属于该父游标的所有子游标以查找匹配的子游标。...在匹配的父游标中查找匹配的子游标时,如果找到了匹配的子游标,那么Oracle就会把存储于该子游标中的解析树和执行计划直接拿过来重用,而不用再从头开始解析。
Oracle游标变量在函数1传递给函数2 的几种方式总结: 1 使用sys_refcursor在函数out参数中传递 drop table employees; create table employees...factor = 3 sal = 7000 sal_multiple = 14000 factor = 4 sal = 8000 sal_multiple = 16000 2 使用sys_refcursor在函数返回值中传递...= 3 sal = 7000 sal_multiple = 14000 factor = 4 sal = 8000 sal_multiple = 16000 3 使用包定义的ref cursor类型在函数...out参数中传递 drop table employees; create table employees(employee_id int, salary int, raise int, job_id...= 3 sal = 7000 sal_multiple = 14000 factor = 4 sal = 8000 sal_multiple = 16000 3 使用包定义的ref cursor类型在函数返回值中传递
♣ 题目部分 在Oracle中,什么是会话游标?会话游标和共享游标的区别有哪些?会话游标分为哪几类?...由于在缓存会话游标的哈希表的对应Hash Bucket中,Oracle会存储目标SQL对应的父游标的库缓存对象句柄地址,所以,Oracle可以通过会话游标找到对应的父游标,进而就可以找到对应子游标中目标...在上表中需要注意的是,动态游标是Oracle数据库中最灵活的一种会话游标,它的灵活性表现在:①动态游标的定义方式非常灵活,它可以有多种定义方式。②动态游标可以作为存储过程的输入参数和函数的输出参数。...在Oracle 10g中默认为20(注意:在官方文档中记录的该值默认为0是有误的),11g中默认为50。...① 在Oracle 11gR2中,一个会话游标能够被缓存在PGA中的必要条件是该会话游标所对应的SQL解析和执行的次数要超过3次。
♣ 题目部分 在Oracle中,什么是常规游标共享?...下面分别来介绍常规游标共享和自适应游标共享这两个方面。 1、 常规游标共享 常规游标共享是在Oracle 8i中引入的。...当开启了常规游标共享后,Oracle在实际解析目标SQL之前,会先用系统产生的绑定变量来替换目标SQL的SQL文本中WHERE条件或者INSERT中的VALUES子句中的具体输入值,这样替换后实际执行的...在Oracle 10g及其后续的版本中,Oracle会自动收集直方图统计信息,这意味着在Oracle 10g及其后续的版本中出现不安全的谓词条件的概率要大大高于Oracle 10g之前的版本,所以在Oracle...在Oracle 11g里也不要将CURSOR_SHARING的值设成SIMILAR,因为在Oracle 11g里自适应游标共享已经被默认启用了,在自适应游标共享被启用的情形下,Oracle并不推荐将CURSOR_SHARING
获取ASH报告可以有3种方式:(1)脚本生成,(2)OEM生成,(3)存储过程生成。 (1)ASH报告生成脚本如下所示,根据提示输入相应的值即可获得ASH报告。 l Linux:@?...\rdbms\admin\ashrpt.sql (2)使用OEM,可以在性能页,单击“运行ASH报告”按钮生成ASH报告,由于OEM生产用的相对比较少,这里就不讨论了。...(3)可以利用存储过程DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_HTML()来获取ASH报告的文本内容,然后将文本内容拷贝到文本文件中,最后修改文本文件的后缀名为html即可打开
Q 题目 简述Oracle中存储过程,游标和函数的区别。 A 答案 游标类似指针,游标可以执行多个不相关的操作。...存储过程和函数的区别如下所示: ① 函数可以理解为是存储过程的一种; ② 函数可以没有参数,但是一定需要一个返回值,存储过程可以没有参数,不需要返回值; ③ 函数和存储过程都可以通过OUT参数返回值,如果需要返回多个参数那么建议使用存储过程...; ④ 在SQL数据操纵语句中只能调用函数而不能调用存储过程。
]之内,所以刚才Oracle在执行上述SQL时(即第8次执行目标SQL)用的就是软解析/软软解析,并且此时重用的就是CHILD_NUMBER为5的Child Cursor中存储的解析树和执行计划。...l 为了存储这些额外的Child Cursor,Shared Pool在空间方面也会承受额外的压力(所以当从Oracle 10g升级到Oracle 11g时,Oracle会建议适当增加Shared Pool...这里需要注意的是,自适应游标共享在Oracle 11g中有一个硬限制——只有当目标SQL中的绑定变量(不管这个绑定变量是该SQL自带的还是开启常规游标共享后系统产生的)的个数不超过14个时,自适应游标共享才会生效...Child Cursor,即当目标SQL中的绑定变量的数量不超过14时,自适应游标共享确实生效了: LHR@orclasm > SELECT A.SQL_TEXT, A.SQL_ID,A.VERSION_COUNT...数据库中与自适应游标共享相关的全部内容。
在第7次执行目标SQL时依然用的是硬解析。...注意,“Peeked Binds”部分的内容为“1 - :X (VARCHAR2(30), CSID=852): 'CLUSTER'”,说明Oracle在硬解析上述SQL的过程中确实再次使用了绑定变量窺探...究其根本原因,还是因为在自适应共享游标被启用的前提条件下,当已经被标记为Bind Aware的Child Cursor所对应的目标SQL再次被执行时,Oracle会根据当前传入的绑定变量值所对应的谓词条件的可选择率...如果当前传入的绑定变量值所在的谓词条件的可选择率处于该SQL之前硬解析时同名谓词条件在V$SQL_CS_STATISTICS中记录的可选择率范围之内,则此时Oracle就会使用软解析/软软解析,反之则是硬解析...上述SQL从第4次到第7次的连续4次执行时,对应的谓词条件的可选择率范围均不在之前V$SQL_CS_SELECTIVITY中记录的相关旧Child Cursor对应的可选择率范围之内,所以这4次执行时Oracle
,则Oracle此时除了会新生成一个Child Cursor之外,还会把存储相同执行计划的原有Child Cursor标记为非共享(把原有Child Cursor在V$SQL中对应记录的列IS SHAREABLE...注意到“Peeked Binds”部分的内容为“1 - :X (VARCHAR2(30), CSID=852): 'INDEX'”,这说明Oracle在硬解析目标SQL的过程中确实再次使用了绑定变量窥探...在介绍自适应游标共享的整体执行流程时曾经提到过:对于标记为Bind Aware的Child Cursor所对应的目标SQL,当该SQL再次被执行时,Oracle就会根据当前传入的绑定变量值所对应的谓词条件的可选择率...注意到“Peeked Binds”部分的内容为“1 - :X (VARCHAR2(30), CSID=852): 'SYNONYM'”,这说明Oracle在硬解析该SQL的过程中确实再次使用了绑定变量窥探...注意,“Peeked Binds”部分的内容为“1 - :X (VARCHAR2(30), CSID=852): 'JAVA CLASS'”,说明Oracle在硬解析上述SQL的过程中确实再次使用了绑定变量窺探
♣ 题目部分 在Oracle中,什么是自适应游标共享?...在Oracle 10g及其后续的版本中,Oracle会自动收集直方图统计信息,这意味着与之前的版本相比,在Oracle 10g及其后续的版本中Oracle有更大的概率会知道目标列实际数据的分布情况,也就是说绑定变量窥探的副作用将会更加明显...为了解决上述绑定变量窥探所带来的问题,Oracle在l1g中引入了自适应游标共享(Adaptive Cursor Sharing,ACS)。...先介绍Oracle数据库中与自适应游标共享相关的一些基本概念。...这里需要注意的是,自适应游标共享在Oracle 11g中有一个硬限制——只有当目标SQL中的绑定变量(不管这个绑定变量是该SQL自带的还是开启常规游标共享后系统产生的)的个数不超过14个时,自适应游标共享才会生效
♣ 题目部分 在Oracle中,常规游标共享和自适应游标共享的联系和区别有哪些? ♣ 答案部分 从严格意义上来说,常规游标共享和自适应游标共享是各自独立的,两者之间没有必然的联系。...常规游标共享的目的是通过使用系统产生的绑定变量替换目标SQL的SQL文本中的具体输入值,以达到在不改一行应用代码的情况下,使那些仅仅是SQL文本的WHERE条件或者VALUES子句(适用于INSERT语句...)中的具体输入值不同的目标SQL彼此之间共享解析树和执行计划。...在Oracle 11g中,对于使用了绑定变量的目标SQL而言,不管这个绑定变量是该SQL自带的还是开启常规游标共享后系统产生的,只要满足一定的条件(比如绑定变量窥探被开启,该SQL中使用的绑定变量的数量不超过...在自适应游标共享被开启的情况下,Oracle并不推荐将CURSOR_SHARING的值设为SIMILAR,因为当把CURSOR_SHARING的值设为SIMILAR后,对自适应游标共享可能有不好的影响,
文章背景:在采用VBA抓取数据时,有时需要判断指定数值是否在一维数组中已存在;如果存在,则希望能够获取该数值在数组内的位置。...在实践过程中发现,VBA的filter函数无法完全匹配指定数值;而借助Excel的match函数,可以实现完全匹配。接下来分别对Filter函数和Match函数进行介绍。...指出要使用的字串比较种类的数值。 compare引数可具有以下的值: vbBinaryCompare选项,区分大小写;vbTextCompare选项,不区分大小写。...应用示例: 判断某字符串是否在一维数组内存在。 由上图可以看出,采用Filter函数匹配到的是包含A-1的所有元素。而在实际案例中,可能希望只获得完全匹配的元素。...WorksheetFunction.Match 方法 傳回項目在陣列中的相對位置,其符合指定順序中的指定值。
题目部分 在Oracle中,如何获取IP地址? 答案部分 若是获取服务器IP地址,则使用UTL_INADDR.GET_HOST_ADDRESS。...若是获取客户端IP地址则使用SYS_CONTEXT('USERENV','IP_ADDRESS')。 SYS_CONTEXT函数是Oracle提供的一个获取环境上下文信息的预定义函数。...该函数用来返回一个指定NAMESPACE下的PARAMETER值。该函数可以在SQL和PL/SQL语言中使用。...STATEMENTID, SYS_CONTEXT('USERENV', 'TERMINAL') TERMINAL --USERENV('TERMINAL') FROM DUAL; USERENV函数用来返回当前的会话信息...会话语言名称的ISO简记, USERENV('INSTANCE') 当前的实例, USERENV('TERMINAL') 当前计算机名 FROM DUAL; 本文选自《Oracle
题目部分 【DB笔试面试825】在Oracle中,如何获取ADDM报告? ♣ 答案部分 有两种办法可以获取ADDM报告: (1) 采用addmrpt.sql脚本。运行脚本:@?...START_SNAPSHOT是起始快照ID,END_SNAPSHOT是结束快照ID,INSTANCE是实例号,对于单实例,一般是1,在RAC环境下,可以通过查询视图GVINSTANCE得到,DB_ID是数据库的唯一识别号...若普通用户使用DBMS_ADVISOR包获取ADDM报告,则必须使用SYS给这个普通用户赋予如下权限: GRANT EXECUTE ON DBMS_ADVISOR TO USER_LHR; GRANT...ADVISOR TO USER_LHR; & 说明: 有关ADDM的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2140642/ 本文选自《Oracle
♣ 题目部分 【DB笔试面试820】在Oracle中,如何获取AWR报告? ♣ 答案部分 Oracle可以生成两种类型的AWR报告:文本格式和html格式。其中,html格式的报告界面更加友好。...有针对整个数据库的AWR报告,有针对某个实例的AWR报告(在集群环境),也有针对单条SQL语句的AWR报告。...可以通过运行Oracle自带的SQL脚本产生AWR报告,只是产生不同的AWR报告,需要运行不同的脚本。...@$ORACLE_HOME/rdbms/admin/awrrpti.sql l 产生针对不同时段性能的一个比对报告,运行脚本awrddrpt.sql: @$ORACLE_HOME/rdbms/admin...本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗
♣ 题目部分 【DB笔试面试818】在Oracle中,如何获取ASH报告? ♣ 答案部分 获取ASH报告可以有3种方式:(1)脚本生成,(2)OEM生成,(3)存储过程生成。...\rdbms\admin\ashrpt.sql (2)使用OEM,可以在性能页,单击“运行ASH报告”按钮生成ASH报告,由于OEM生产用的相对比较少,这里就不讨论了。...(3)可以利用存储过程DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_HTML()来获取ASH报告的文本内容,然后将文本内容拷贝到文本文件中,最后修改文本文件的后缀名为html即可打开...|| (D.SNAP_ID) || ')));' ASH_REPORT FROM DBA_HIST_ASH_SNAPSHOT D ORDER BY D.SNAP_ID DESC; 本文选自《Oracle
为什么使用 encodeURIComponent() 在使用 URL 传参的时候,如果参数中有空格等特殊字符,浏览器可能只会读取到空格面前的内容,导部分致数据丢失。...定义和用法: encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。 语法: encodeURIComponent(URIstring) 参数: URIstring必需。...3、请注意 encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。...因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。...未经允许不得转载:w3h5 » encodeURIComponent()函数在url传参中的作用和使用方法
♣ 题目部分 在Oracle中,函数索引是什么?...♣ 答案部分 在Oracle中,有一类特殊的索引,称为函数索引(Function-Based Indexes,FBI),它基于对表中列进行计算后的结果创建索引。...函数索引在不修改应用程序的逻辑基础上提高了查询性能。如果没有函数索引,那么任何在列上执行了函数的查询都不能使用这个列的索引。当在查询中包含该函数时,数据库才会使用该函数索引。...② 如果被函数索引所引用的用户自定义PL/SQL函数失效了或该函数索引的属主没有了在函数索引里面使用的函数的执行权限,那么对这张表上的执行的所有的操作(例如SELECT查询、DML等)也将失败(会报错:...④ 在创建索引的函数里面不能使用SUM、COUNT等聚合函数。 ⑤ 不能在LOB类型的列、NESTED TABLE列上创建函数索引。 ⑥ 不能使用SYSDATE、USER等非确定性函数。
♣ 题目部分 在Oracle中,如何获取用户的权限?...♣ 答案部分 若要获取一个用户的角色、系统权限、对象权限以及列权限,则可以通过以上介绍的数据字典视图来获取也可以通过DBMS_METADATA.GET_GRANTED_DDL来获取。...GRANT SELECT ON SCOTT.EMP TO LHRSYS; GRANT CONNECT TO LHRSYS; GRANT CREATE JOB TO LHRSYS; 若通过数据字典来获取权限则可以通过如下的程序来获取...另外还可以通过exp或expdp来获取用户的权限,这里不再演示。...& 说明: 有关权限的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2140775/ 本文选自《Oracle程序员面试笔试宝典》,作者:
领取专属 10元无门槛券
手把手带您无忧上云