DUAL是真实的表吗

DUAL是真实的表,还是优化器对DUAL的引用进行特别处理?

创新互联公司是一家专业提供柳南企业网站建设,专注与成都网站设计、做网站、成都外贸网站建设公司成都h5网站建设、小程序制作等业务。10年已为柳南众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。

结论:是真实的表,见以下分析。

同时,根据建库脚本$ORACLE_HOME/RDBMS/ADMIN/dcore.bsq,优化器对该表有特殊处理,具体如何处理没有详细说明。

1 执行计划

 
 
 
  1. select * from dual;
  2. Plan hash value: 272002086
  3.  
  4. --------------------------------------------------------------------------
  5. | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
  6. --------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT  |      |     1 |     2 |     2   (0)| 00:00:01 |
  8. |   1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |

2 rowid

 
 
 
  1. select dbms_rowid.rowid_object(rowid) obj,
  2.        dbms_rowid.rowid_relative_fno(rowid) rfno,
  3.        dbms_rowid.rowid_block_number(rowid) bno,
  4.        dbms_rowid.rowid_row_number(rowid) rno from dual;
  5.       
  6. OBJ RFNO BNO RNO
  7. 258 1 2082 0      
  8. select owner,object_name,object_id from dba_objects where object_id=258;
  9. OWNER OBJECT_NAME OBJECT_ID
  10. SYS DUAL 258

3,dump block

 
 
 
  1. alter system dump datafile 1 block 2082;
  2. --------------------------------------------------
  3. /u01/app/oracle/product/10.2.0/db_1/admin/bocnet/udump/bocnet_ora_557.trc
  4. Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
  5. With the Partitioning, OLAP and Data Mining options
  6. ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1
  7. System name: Linux
  8. Node name: bocnet95
  9. Release: 2.6.18-164.el5xen
  10. Version: #1 SMP Thu Sep 3 04:47:32 EDT 2009
  11. Machine: i686
  12. Instance name: bocnet
  13. Redo thread mounted by this instance: 1
  14. Oracle process number: 50
  15. Unix process pid: 557, image:oracle@bocnet95(TNS V1-V3)
  16. *** SERVICE NAME:(SYS$USERS) 2011-05-29 04:54:44.485
  17. *** SESSION ID:(135.9121) 2011-05-29 04:54:44.485
  18. Start dump data blocks tsn: 0 file#: 1 minblk 2082 maxblk 2082
  19. buffer tsn: 0 rdba: 0x00400822 (1/2082)
  20. scn: 0x0006.c428013f seq: 0x01 flg: 0x04 tail: 0x013f0601
  21. frmt: 0x02 chkval: 0x89a3 type: 0x06=trans data
  22. Hex dump of block: st=0, typ_found=1
  23. Dump of memory from 0x0D6D0400 to 0x0D6D2400
  24. D6D0400 0000A206 00400822 C428013F 04010006  [....".@.?.(.....]
  25. D6D0410 000089A3 00000001 00000102 A514474A  [............JG..]
  26. D6D0420 00000001 00030002 00000000 00200009  [.............. .]
  27. D6D0430 00003DF2 00820CFC 00070E84 00018000  [.=..............]
  28. D6D0440 A41874A9 00230001 00004CA9 00800C2F  [.t....#..L../...]
  29. D6D0450 002A1137 0001A000 A513B6E3 00010100  [7.*.............]
  30. D6D0460 0014FFFF 1F831F9B 00001F83 1F9B0001  [................]
  31. D6D0470 00000000 00000000 00000000 00000000  [................]
  32.         Repeat 503 times
  33. D6D23F0 00000000 2C000000 58010100 013F0601  [.......,...X..?.]
  34. Block header dump:  0x00400822
  35.  Object id on Block? Y
  36.  seg/obj: 0x102  csc: 0x01.a514474a  itc: 2  flg: O  typ: 1 - DATA
  37.      fsl: 0  fnx: 0x0 ver: 0x01
  38.  
  39.  Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
  40. 0x01   0x0009.020.00003df2  0x00820cfc.0e84.07  C---    0  scn 0x0001.a41874a9
  41. 0x02   0x0001.023.00004ca9  0x00800c2f.1137.2a  C-U-    0  scn 0x0001.a513b6e3
  42.  
  43. data_block_dump,data header at 0xd6d045c
  44. ===============
  45. tsiz: 0x1fa0
  46. hsiz: 0x14
  47. pbl: 0x0d6d045c
  48. bdba: 0x00400822
  49.      76543210
  50. flag=--------
  51. ntab=1
  52. nrow=1
  53. frre=-1
  54. fsbo=0x14
  55. fseo=0x1f9b
  56. avsp=0x1f83
  57. tosp=0x1f83
  58. 0xe:pti[0] nrow=1 offs=0
  59. 0x12:pri[0] offs=0x1f9b
  60. block_row_dump:
  61. tab 0, row 0, @0x1f9b
  62. tl: 5 fb: --H-FL-- lb: 0x0  cc: 1
  63. col  0: [ 1]  58
  64. end_of_block_dump
  65. End dump data blocks tsn: 0 file#: 1 minblk 2082 maxblk 2082
  66. ---------------------------------------------------

4 手工建库脚本

 
 
 
  1. $ORACLE_HOME/RDBMS/ADMIN/dcore.bsq
  2. --dual
  3. create table dual                   /* pl/sql's standard pckg requires dual. */
  4.   (dummy varchar2(1))    /* note, the optimizer knows sys.dual is single row */
  5.   storage (initial 1)
  6. /
  7. insert into dual values('X')
  8. /
  9. create public synonym dual for dual
  10. /

【延伸扩展】DUAL是什么?

DUAL:Diffusing Update Algorithm ,弥散更新算法.EIGRP组件之一。dual是Oracle与数据字典一起自动创建的一个虚拟表﹐它只有一列﹕DUMMY﹐其数据类型为﹕VARCHAR2(1)。dual中只有一行数据﹕ 'X '。dual属于sys模式﹐但所有用户都可以使用dual名称访问它﹐用SELECT计算常量表达式﹑伪列等值时常用该表﹐因为它只返回一行数据﹐而使用其它表时可能返回多个数据行。用来查那些不属于实际表里的内容,有时也用来检查某表某条件的记录存在性。

 
 
 
  1. 如:select sysdate from dual;   
  2. select 3+3 from dual;   
  3. 相当与Sql Server的   
  4. set @Date=getdate()

   

本文标题:DUAL是真实的表吗
URL地址:http://www.shufengxianlan.com/qtweb/news7/266157.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联