数据库查询性能优化方式有哪些

数据库查询性能优化方式有哪些,第1张

1、1、调整数据结构的设计。这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。

2、2、调整应用程序结构设计。这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。

3、3、调整数据库SQL语句。应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率最终决定了ORACLE数据库的性能。ORACLE公司推荐使用ORACLE语句优化器(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化SQL语句。

4、4、调整服务器内存分配。内存分配是在信息系统运行过程中优化配置的,数据库管理员可以根据数据库运行状况调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调整程序全局区(PGA区)的大小。需要注意的是,SGA区不是越大越好,SGA区过大会占用 *** 作系统使用的内存而引起虚拟内存的页面交换,这样反而会降低系统。

5、5、调整硬盘I/O,这一步是在信息系统开发之前完成的。数据库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。

6、6、调整 *** 作系统参数,例如:运行在UNIX *** 作系统上的ORACLE数据库,可以调整UNIX数据缓冲池的大小,每个进程所能使用的内存大小等参数。

实际上,上述数据库优化措施之间是相互联系的。ORACLE数据库性能恶化表现基本上都是用户响应时间比较长,需要用户长时间的等待。但性能恶化的原因却是多种多样的,有时是多个因素共同造成了性能恶化的结果,这就需要数据库管理员有比较全面的计算机知识,能够敏感地察觉到影响数据库性能的主要原因所在。另外,良好的数据库管理工具对于优化数据库性能也是很重要的。

ORACLE数据库性能优化工具

常用的数据库性能优化工具有:

1、1、ORACLE数据库在线数据字典,ORACLE在线数据字典能够反映出ORACLE动态运行情况,对于调整数据库性能是很有帮助的。

2、2、 *** 作系统工具,例如UNIX *** 作系统的vmstat,iostat等命令可以查看到系统系统级内存和硬盘I/O的使用情况,这些工具对于管理员弄清出系统瓶颈出现在什么地方有时候很有用。

3、3、SQL语言跟踪工具(SQL TRACE FACILITY),SQL语言跟踪工具可以记录SQL语句的执行情况,管理员可以使用虚拟表来调整实例,使用SQL语句跟踪文件调整应用程序性能。SQL语言跟踪工具将结果输出成一个 *** 作系统的文件,管理员可以使用TKPROF工具查看这些文件。

4、4、ORACLE Enterprise Manager(OEM),这是一个图形的用户管理界面,用户可以使用它方便地进行数据库管理而不必记住复杂的ORACLE数据库管理的命令。

5、5、EXPLAIN PLAN——SQL语言优化命令,使用这个命令可以帮助程序员写出高效的SQL语言。

ORACLE数据库的系统性能评估

信息系统的类型不同,需要关注的数据库参数也是不同的。数据库管理员需要根据自己的信息系统的类型着重考虑不同的数据库参数。

1、1、在线事务处理信息系统(OLTP),这种类型的信息系统一般需要有大量的Insert、Update *** 作,典型的系统包括民航机票发售系统、银行储蓄系统等。OLTP系统需要保证数据库的并发性、可靠性和最终用户的速度,这类系统使用的ORACLE数据库需要主要考虑下述参数:

l l 数据库回滚段是否足够?

l l 是否需要建立ORACLE数据库索引、聚集、散列?

l l 系统全局区(SGA)大小是否足够?

l l SQL语句是否高效?

2、2、数据仓库系统(Data Warehousing),这种信息系统的主要任务是从ORACLE的海量数据中进行查询,得到数据之间的某些规律。数据库管理员需要为这种类型的ORACLE数据库着重考虑下述参数:

l l 是否采用B*-索引或者bitmap索引?

l l 是否采用并行SQL查询以提高查询效率?

l l 是否采用PL/SQL函数编写存储过程?

l l 有必要的话,需要建立并行数据库提高数据库的查询效率

SQL语句的调整原则

SQL语言是一种灵活的语言,相同的功能可以使用不同的语句来实现,但是语句的执行效率是很不相同的。程序员可以使用EXPLAIN PLAN语句来比较各种实现方案,并选出最优的实现方案。总得来讲,程序员写SQL语句需要满足考虑如下规则:

1、1、尽量使用索引。试比较下面两条SQL语句:

语句A:SELECT dname, deptno FROM dept WHERE deptno NOT IN

(SELECT deptno FROM emp)

语句B:SELECT dname, deptno FROM dept WHERE NOT EXISTS

(SELECT deptno FROM emp WHERE dept.deptno = emp.deptno)

这两条查询语句实现的结果是相同的,但是执行语句A的时候,ORACLE会对整个emp表进行扫描,没有使用建立在emp表上的deptno索引,执行语句B的时候,由于在子查询中使用了联合查询,ORACLE只是对emp表进行的部分数据扫描,并利用了deptno列的索引,所以语句B的效率要比语句A的效率高一些。

2、2、选择联合查询的联合次序。考虑下面的例子:

SELECT stuff FROM taba a, tabb b, tabc c

WHERE a.acol between :alow and :ahigh

AND b.bcol between :blow and :bhigh

AND c.ccol between :clow and :chigh

AND a.key1 = b.key1

AMD a.key2 = c.key2

这个SQL例子中,程序员首先需要选择要查询的主表,因为主表要进行整个表数据的扫描,所以主表应该数据量最小,所以例子中表A的acol列的范围应该比表B和表C相应列的范围小。

3、3、在子查询中慎重使用IN或者NOT IN语句,使用where (NOT) exists的效果要好的多。

4、4、慎重使用视图的联合查询,尤其是比较复杂的视图之间的联合查询。一般对视图的查询最好都分解为对数据表的直接查询效果要好一些。

5、5、可以在参数文件中设置SHARED_POOL_RESERVED_SIZE参数,这个参数在SGA共享池中保留一个连续的内存空间,连续的内存空间有益于存放大的SQL程序包。

6、6、ORACLE公司提供的DBMS_SHARED_POOL程序可以帮助程序员将某些经常使用的存储过程“钉”在SQL区中而不被换出内存,程序员对于经常使用并且占用内存很多的存储过程“钉”到内存中有利于提高最终用户的响应时间。

CPU参数的调整

CPU是服务器的一项重要资源,服务器良好的工作状态是在工作高峰时CPU的使用率在90%以上。如果空闲时间CPU使用率就在90%以上,说明服务器缺乏CPU资源,如果工作高峰时CPU使用率仍然很低,说明服务器CPU资源还比较富余。

使用 *** 作相同命令可以看到CPU的使用情况,一般UNIX *** 作系统的服务器,可以使用sar –u命令查看CPU的使用率,NT *** 作系统的服务器,可以使用NT的性能管理器来查看CPU的使用率。

数据库管理员可以通过查看v$sysstat数据字典中“CPU used by this session”统计项得知ORACLE数据库使用的CPU时间,查看“OS User level CPU time”统计项得知 *** 作系统用户态下的CPU时间,查看“OS System call CPU time”统计项得知 *** 作系统系统态下的CPU时间, *** 作系统总的CPU时间就是用户态和系统态时间之和,如果ORACLE数据库使用的CPU时间占 *** 作系统总的CPU时间90%以上,说明服务器CPU基本上被ORACLE数据库使用着,这是合理,反之,说明服务器CPU被其它程序占用过多,ORACLE数据库无法得到更多的CPU时间。

数据库管理员还可以通过查看v$sesstat数据字典来获得当前连接ORACLE数据库各个会话占用的CPU时间,从而得知什么会话耗用服务器CPU比较多。

出现CPU资源不足的情况是很多的:SQL语句的重解析、低效率的SQL语句、锁冲突都会引起CPU资源不足。

1、数据库管理员可以执行下述语句来查看SQL语句的解析情况:

SELECT * FROM V$SYSSTAT

WHERE NAME IN

('parse time cpu', 'parse time elapsed', 'parse count (hard)')

这里parse time cpu是系统服务时间,parse time elapsed是响应时间,用户等待时间

waite time = parse time elapsed – parse time cpu

由此可以得到用户SQL语句平均解析等待时间=waite time / parse count。这个平均等待时间应该接近于0,如果平均解析等待时间过长,数据库管理员可以通过下述语句

SELECT SQL_TEXT, PARSE_CALLS, EXECUTIONS FROM V$SQLAREA

ORDER BY PARSE_CALLS

来发现是什么SQL语句解析效率比较低。程序员可以优化这些语句,或者增加ORACLE参数SESSION_CACHED_CURSORS的值。

2、数据库管理员还可以通过下述语句:

SELECT BUFFER_GETS, EXECUTIONS, SQL_TEXT FROM V$SQLAREA

查看低效率的SQL语句,优化这些语句也有助于提高CPU的利用率。

3、3、数据库管理员可以通过v$system_event数据字典中的“latch free”统计项查看ORACLE数据库的冲突情况,如果没有冲突的话,latch free查询出来没有结果。如果冲突太大的话,数据库管理员可以降低spin_count参数值,来消除高的CPU使用率。

内存参数的调整

内存参数的调整主要是指ORACLE数据库的系统全局区(SGA)的调整。SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。

1、 1、 共享池由两部分构成:共享SQL区和数据字典缓冲区,共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。数据库管理员通过执行下述语句:

select (sum(pins - reloads)) / sum(pins) "Lib Cache" from v$librarycache

来查看共享SQL区的使用率。这个使用率应该在90%以上,否则需要增加共享池的大小。数据库管理员还可以执行下述语句:

select (sum(gets - getmisses - usage - fixed)) / sum(gets) "Row Cache" from v$rowcache

查看数据字典缓冲区的使用率,这个使用率也应该在90%以上,否则需要增加共享池的大小。

2、 2、 数据缓冲区。数据库管理员可以通过下述语句:

SELECT name, value FROM v$sysstat WHERE name IN ('db block gets', 'consistent gets','physical reads')

来查看数据库数据缓冲区的使用情况。查询出来的结果可以计算出来数据缓冲区的使用命中率=1 - ( physical reads / (db block gets + consistent gets) )。

这个命中率应该在90%以上,否则需要增加数据缓冲区的大小。

3、 3、 日志缓冲区。数据库管理员可以通过执行下述语句:

select name,value from v$sysstat where name in ('redo entries','redo log space requests')查看日志缓冲区的使用情况。查询出的结果可以计算出日志缓冲区的申请失败率:

申请失败率=requests/entries,申请失败率应该接近于0,否则说明日志缓冲区开设太小,需要增加ORACLE数据库的日志缓冲区。

无论是写论文还是做研究,我们都需要查阅大量的文献。面对日益增多的在线论文数量,如果我们能快速有效地在许多数据中找到我们想要的文献,我们可以大大提高我们的写作效率,减少浪费时间。那怎么查询论文文献才能快速有效?

怎么论文查询才能快速有效?

方法一:通过询问有经验的人,获得准确的论文题目或其他关键词,使论文查询过程更加简洁耗时;

方法二:了解相应专业领域的领军人物,通过搜索他的名字获取相关文献的具体信息,最后用论文查询网站进行搜索;

方法三:充分利用论文查询网站的筛选功能。如果你只知道你想找到一篇论文的某一方面,但没有明确的概念,你需要充分利用网站的先进搜索和筛选功能,将关键字输入搜索栏,然后根据条件进行筛选,以获得数十甚至数百条相关信息。

有哪些论文查询网站?

即使你知道如何查询论文,也找不到可靠的论文查询网站。对于大学生来说,他们必须充分利用自己学校的电子图书馆。各大高校都会购买论文数据库。学校投入的资金越多,数据库就越丰富。因此,一些高校图书馆的数据可能非常有限,学校电子图书馆的使用也有很多限制。他们只能通过校园网登录。此时,他们需要使用学校以外的网站。

ORACLE中SQL查询优化研究

摘 要 数据库性能问题一直是决策者及技术人员共同关注的焦点,影响数据库性能的一个重要因素就是SQL查询语句的低效率。论文首先分析了导致SQL查询语句性能低下的四个常见原因以及SQL调优的一般步骤,然后分别针对如何降低I/O *** 作、在查询语句中如何避免对查询结果的高成本 *** 作以及在多表连接时如何提高查询效率进行了分析。

关键词 ORACLE;SQL;优化;连接

1 引言

随着网络应用不断发展,系统性能已越来越引起决策者的重视。影响系统性能的因素很多,低效的SQL语句就是其中一个不可忽视的重要原因。论文首先分析导致SQL性能低下的常见原因,然后分析SQL调优应遵循的一般步骤,最后从如何降低I/O、避免对查询结果的高成本 *** 作和多表连接中如何提高SQL性能进行了研究。鉴于目前ORACLE在数据库市场上的主导地位,论文将只针对ORACLE进行讨论。

2 影响SQL性能的原因

影响SQL性能的因素很多,如初始化参数设置不合理、导入了不准确的系统及模式统计数据从而影响优化程序(CBO)的正确判断等,这些往往和DBA密切相关。纯粹从SQL语句出发,笔者认为影响SQL性能不外乎以下四个重要原因:

(1)在大记录集上进行高成本 *** 作,如使用了引起排序的谓词等。

(2)过多的I/O *** 作(含物理I/O与逻辑I/O),最典型的就是未建立恰当的索引,导致对查询表进行全表扫描。

(3)处理了太多的无用记录,如在多表连接时过滤条件位置不当导致中间结果集包含了太多的无用记录。

(4)未充分利用数据库提供的功能,如查询的并行化处理等。

第(4)个原因处理起来相对简单。论文将针对前三个原因论述如何提高SQL查询语句的性能。

3 SQL优化的一般步骤

SQL优化一般需经过发现问题、分析问题、提出解决措施、应用措施、测试性能几个步骤,如图1所示。“发现问题就是解决问题的一半”,因此在SQL调优过程中,定位问题SQL是非常重要的一步,一般可借助于ORACLE自带的性能优化工具如STATSPACK、TKPROF、AUTOTRACE等辅助用户进行,同时还应该重视动态性能视图如V$SQL、V$MYSTAT、V$SYSSTAT等的研究。

图1 SQL优化的一般步骤

4 SQL语句的优化

4.1 优化排序 *** 作

排序的成本十分高昂,当在查询语句中使用了引起结果集排序的谓词时,SQL性能必然受到影响。

4.1.1 排序过程分析

当待排序数据集不是太大时,服务器在内存(排序区)完成排序 *** 作,如果排序需要更多的内存空间,服务器将进行如下处理:

(1) 将数据分成多个小的集合,对每一集合进行排序。

(2) 服务器向磁盘申请临时空间,将排好序的中间结果写入临时段,再对另外的集合进行排序。

(3) 在所有的集合均排好序后,服务器再将它们进行合并得到最终的结果,如果排序区尺寸太小,合并无法一次完成时,将分多次进行。

从上述分析可知,排序是一种十分昂贵的 *** 作,它消耗大量的CPU时间和内存,触发磁盘分页和交换 *** 作,因此只要有可能,我们就应该在SQL语句中尽量避免排序 *** 作。

4.1.2 SQL中引起排序的 *** 作

SQL查询语句中引起排序的 *** 作大致有:ORDER BY 和GROUP BY 从句;DISTINCT修饰符;UNION、INTERSECT、MINUS集合 *** 作符;多表连接时的排序合并连接(SORT MERGE JOIN)等。

4.1.3 如何避免排序

1)建立恰当的索引

对经常进行排序和连接 *** 作的字段建立索引。在建立索引后,当服务器向这些字段发出排序请求时,将直接引用索引而不进行排序 *** 作;当进行等值连接查询 *** 作时,若建立连接的字段未建立索引,服务器进行的是排序合并连接(SORT MERGE JOIN),连接 *** 作的过程如下:

对进行连接的两个或多个表分别进行全扫描;

对每一个表中的行集分别进行全排序;

合并排序结果。

如果建立连接的字段已建立索引,服务器进行嵌套循环连接(NESTED LOOP JOINS),该连接方式不需要任何排序,其过程如下:

对驱动表进行全表扫描;

对返回的每一行利用连接字段值实施索引惟一扫描;

利用从索引扫描中返回的ROWID值在从表中定位记录;

合并主、从表中的匹配记录。

因此,建立索引可避免多数排序 *** 作。

2)用UNIION ALL替换UNION

UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。大部分应用中是不会产生重复记录的,最常见的是过程表与历史表UNION 。因此,采用UNION ALL *** 作符替代UNION,因为UNION ALL *** 作只是简单的将两个结果合并后就返回。

4.2 优化I/O

过多的I/O *** 作会占用CPU时间、消耗大量内存和占用过多的栓锁,因此有必要对SQL的I/O进行优化。优化I/O的最有效方式就是用索引扫描代替全表扫描。

4.2.1 应用基于函数的索引

基于函数的索引(FUNCTION BASED INDEX,简记为FBI)提供了索引计算列并在查询中使用这些索引的能力。FBI的实质是对查询所需中间结果进行预处理。如果一个FBI与查询语句中的内嵌函数完全匹配,CBO在生成查询计划时,将自动启用索引范围扫描(INDEX RANGE SCAN)替换全表扫描(FULL TABLE SCAN)。考察下面的代码段并用AUTOTRACE观察创建FBI前后执行计划的变化。

select * from emp where upper(ename)=’SCOTT’

创建FBI前,很明显是全表扫描。

Execution Plan

……

10 TABLE ACCESS (FULL) OF 'EMPLOYEES' (Cost=2 Card=1 Bytes=22)

idle>CREATE INDEX EMP_UPPER_FIRST_NAME ON EMPLOYEES(UPPER(FIRST_NAME));

索引已创建。

再次运行相同查询,

Execution Plan

……

10 TABLE ACCESS (BY INDEX ROWID) OF 'EMPLOYEES' (Cost=1 Card=1 Bytes=22)

21 INDEX (RANGE SCAN) OF 'EMP_UPPER_FIRST_NAME' (NON-UNIQUE) (Cost=1 Card=1)

这一简单的例子充分说明了FBI在SQL查询优化中的作用。FBI所用的函数可以是用户自己创建的函数,该函数越复杂,基于该函数创建FBI对SQL查询性能的优化作用越明显。

4.2.2 应用物化视图和查询重写

物化视图是一个预计算结果集,其中通常包含聚集与多表连接等复杂 *** 作。数据库自动维护物化视图,且随用户的要求进行刷新。查询重写机制就是用数据库中的替代对象(如物化视图)将用户提交的查询重写为完全不同但功能等价的查询。查询重写对用户透明,用户完全按常规编写访问数据库的查询语句,优化程序(CBO)自动决定是否对用户提交的查询进行重写。查询重写是提高查询性能的一种非常有效的方法,尤其是在数据仓库环境中针对汇总、多表连接以及其它高成本的 *** 作方面。

下面以一个非常简单的例子来演示物化视图和查询重写在优化SQL查询性能方面的作用。

select dept.deptno,dept.dname,count(*)

from emp,dept

where emp.deptno=dept.deptno

group by dept.deptno,dept.dname

查询计划及主要统计数据如下:

执行计划:

-----------------------------------------

……

21 HASH JOIN (Cost=5 Card=14 Bytes=224)

32 TABLE ACCESS (FULL) OF 'DEPT' (Cost=2 Card=4 Bytes=52)

42 TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=14 Bytes=42)

主要统计数据:

-----------------------------------------

305 recursive calls

46 consistent gets

创建物化视图EMP_DEPT:

create materialized view emp_dept build immediate

refresh on demand

enable query rewrite

as

select dept.deptno,dept.dname,count(*)

from emp,dept

where emp.deptno=dept.deptno

group by dept.deptno,dept.dname

/

再次执行查询,执行计划及主要统计数据如下:

执行计划:

-------------------------------------

……

10 TABLE ACCESS (FULL) OF 'EMP_DEPT' (Cost=2 Card=327 Bytes=11445)

主要统计数据:

------------------------------------

79 recursive calls

28 consistent gets

可见,在建立物化视图之前,首先执行两个表的全表扫描,然后进行HASH连接,再进行分组排序和选择 *** 作;而建立物化视图后,CBO自动将上述复杂 *** 作转换为对物化视图EMP_DEPT的全扫描,相关的统计数据也有了很大的改善,递归调用(RECURSIVE CALLS)由305降到79,逻辑I/O(CONSISTENT GETS)由46降为28。

4.2.3 将频繁访问的小表读入CACHE

逻辑I/O总是快于物理I/O。如果数据库中存在被应用程序频繁访问的小表,可将这些表强行读入KEEP池,从而避免物理I/O的发生。

4.3 多表连接优化

最能体现查询复杂性的就是多表连接,多表连接 *** 作往往要耗费大量的CPU时间和内存,因此多表连接查询性能优化往往是SQL优化的重点与难点。

4.3.1 消除外部连接

通过消除外部连接,不仅使得到的查询更易于读取,而且性能也经常可以得到改善。一般的思路是,有以下形式的查询:

SELECT …,OUTER_JOINED_TABLE.COLUMN

FROM SOME_TABLE,OUTER_JOINED_TO_TABLE

WHERE …=OUTER_JOINED_TO_TABLE(+)

可转换为如下形式的查询:

SELECT …,(SELECT COLUMN FROM OUTER_ JOINED_TO_TABLE WHERE …)FROM SOME_TABLE;

4.3.2 谓词前推,优化中间结果

多表连接的性能低下多数是因为连接 *** 作与过滤 *** 作的次序不合理,大多数用户在编写多表连接查询时,总是先进行连接 *** 作再应用过滤条件,这导致服务器做了太多的无用功。针对这类问题,其优化思路就是尽可能将过滤谓词前推,使不符合条件的记录提前被筛选掉,只对符合条件的少数记录进行连接处理,这样可成倍的提高SQL查询效能。

标准连接查询如下:

Select a.prod_name,sum(b.sale_quant),

sum(c.sale_quant),sum(d.sale_quant)

From product a,tele_sale b,online_sale c,store_sale d

Where a.prod_id=b.prod_id and a.prod_id=c.prod_id

and a.prod_id=d.prod_id And a.order_date>sysdate-90

Group by a.prod_id;

启用内嵌视图,且将条件a.order_date>sysdate-90前移,优化后代码如下:

Select a.prod_name,b.tele_sale_sum,c.online_sale_sum,d.store_sale_sum From product a,

(select sum(sal_quant) tele_sale_sum from product,tele_sale

Where product.order_date>sysdate-90 and product.prod_id =tele_sale.prod_id) b,

(select sum(sal_quant) online_sale_sum

from product,tele_sale

Where product.order_date>sysdate-90 and product.prod_id =online_sale.prod_id) c,

(select sum(sal_quant) store_sale_sum

from product,store_sale

Where product.order_date>sysdate-90 and product.prod_id =store_sale.prod_id) d,

Where a.prod_id=b.prod_id and

a.prod_id=c.prod_id and a.prod_id=d.prod_id;

5 结束语

SQL语言在数据库应用中占有非常重要的地位,其性能的优劣直接影响着整个信息系统的可用性。论文从影响SQL性能的最主要的三个方面入手,分析了如何优化SQL查询的I/O、避免高成本的排序 *** 作和优化多表连接。需要强调的一点是,理解SQL语句所解决的问题比SQL调优本身更重要,因此SQL调优需要系统分析人员、开发人员和数据库管理员密切协作。

参考文献

[1]Thomas Kyte.Effective Oracle by Design:Design and Build High-performance Oracle Application[M],The McGral- Hill Companies,Inc,2003

[2]Kevin Loney,George Koch,Oracle 9i:The Complete Reference[M],The McGral-Hill Companies,Inc,2002

[3] Oracle9i SQL Reference release 2(9.2)[OL/M],2002.10. http://www.oracle.com/technology/

[4] Oracle9i Data Warehousing Guide release 2(9.2) [OL/M],2002.03. http://www.oracle.com/technology/

[5]Alexey Danchenkov,Donald Burleson,Oracle Tuning:The Definitive Reference[OL/M],Rampant Techpress,2006.

[6] Oracle9i Database Concepts release 2(9.2) [OL/M],2002.08. http://www.oracle.com/technology/

[7] Oracle9i supplied plsql packages and types reference release 2(9.2) [OL/M],2002.12. http://www.oracle.com/ technology/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10029622.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存