当前位置:  开发笔记 > 后端 > 正文

Oracle中的隐藏功能

如何解决《Oracle中的隐藏功能》经验,为你挑选了9个好方法。

我喜欢sql server中隐藏功能的答案和问题

您能告诉我们有关Oracle的信息吗?
隐藏的表,...的内部工作,秘密存储过程,具有良好工具的包...



1> Tony Andrews..:

由于Apex现在是每个Oracle数据库的一部分,因此即使您不使用Apex,这些Apex实用程序功能也很有用:

SQL> declare
  2    v_array apex_application_global.vc_arr2;
  3    v_string varchar2(2000);
  4  begin
  5  
  6    -- Convert delimited string to array
  7    v_array := apex_util.string_to_table('alpha,beta,gamma,delta', ',');
  8    for i in 1..v_array.count
  9    loop
 10      dbms_output.put_line(v_array(i));
 11    end loop;
 12  
 13    -- Convert array to delimited string
 14    v_string := apex_util.table_to_string(v_array,'|');
 15    dbms_output.put_line(v_string);
 16  end;
 17  /
alpha
beta
gamma
delta
alpha|beta|gamma|delta

PL/SQL procedure successfully completed.



2> David Aldrid..:

"全表扫描并不总是坏事.索引并不总是好的."

当您根据每个工作单元访问的行(通常是每个逻辑读取)测量时,基于索引的访问方法在读取行时的效率低于完全扫描.然而,许多工具会将全表扫描解释为低效率的标志.

举一个例子,您可以在发票表中阅读几百张发票,并在小型查找表中查找付款方式.使用索引来探测每个发票的查找表可能意味着每个发票有三个或四个逻辑io.但是,为发票数据中的散列连接做准备的查找表的完整扫描可能只需要几个逻辑读取,并且散列连接本身在内存中几乎不需要任何费用.

但是,许多工具会查看此内容并查看"全表扫描",并告诉您尝试使用索引.如果您这样做,那么您可能刚刚调整了代码.

顺便说一句,过度依赖索引,如上例所示,导致"缓冲区高速缓存命中率"上升.这就是为什么BCHR主要是无意义的系统效率预测器.



3> David Aldrid..:

基数提示大多没有记录.

 explain plan for
 select /*+ cardinality(@inner 5000) */ *
 from   (select /*+ qb_name(inner) */ * from dual)
 /
 select * from table(dbms_xplan.display)
 /
 --------------------------------------------------------------------------
 | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
 --------------------------------------------------------------------------
 |   0 | SELECT STATEMENT  |      |  5000 | 10000 |     2   (0)| 00:00:01 |
 |   1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
 --------------------------------------------------------------------------



4> David Aldrid..:

作为系统效率的预测器,缓冲区高速缓存命中率实际上毫无意义



5> David Aldrid..:

您可以使用闪回查询查看上一次的表数据,但有一定的限制.

Select *
  from my_table as of timestamp(timestamp '2008-12-01 15:21:13')

11g有一个全新的功能集,可以更加健壮地保留历史变化.



6> David Aldrid..:

频繁重建索引几乎总是浪费时间.



7> jle..:

wm_concat的工作方式与MySql group_concat类似,但它没有记录.

有数据:

-car-   -maker-
Corvette Chevy
Taurus   Ford
Impala   Chevy
Aveo     Chevy

select wm_concat(car) Cars, maker from cars
group by maker

给你:

-Cars-                   -maker-
Corvette, Impala, Aveo   Chevy
Taurus                   Ford



8> David Aldrid..:

OVERLAPS谓词没有记录.

http://oraclesponge.wordpress.com/2008/06/12/the-overlaps-predicate/



9> 小智..:

我刚刚发现了伪列Ora_rowSCN.如果您没有为此设置表,则此pcolumn将为您提供块SCN.这可能对紧急情况非常有用,"哦,我没有在这张桌子上进行审核,并想知道是否有人自昨天起改变了数据."

但更好的是,如果您创建具有Rowdependecies ON的表.这使得最后一次改变的SCN成为每一行.这将帮助您避免"丢失编辑"问题,而无需在查询中包含每一列.

IOW,当你的app抓取一行进行用户修改时,也选择Ora_rowscn.然后,当您发布用户的编辑时,除了where子句中的唯一键外,还包括Ora_rowscn = v_rscn.如果有人因为你抓住它而触及该行,也就是丢失编辑,更新将匹配零行,因为ora_rowscn将会改变.

非常酷.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有