当前位置:   article > 正文

10家国产数据库临时表的支持统计_vastbase 临时表

vastbase 临时表

多元数据LOGO封面.png

1 引言

在数据库国产化替换的过程中,国产数据库在减“O”、替“O”的工作上有很大的挑战,在稳定、性能指标外,兼容度也是客户非常关注的点。

如果应用系统过度依赖Oracle,设计上使用了大量Oracle的内置函数、大量的存储过程,这是替换过程中极其头疼的一件事。

临时表(TEMPORARY TABLE)用来保存中间数据,通常是会话级或事务级,下面看一下国产数据库在临时表上支持的情况。

2 临时表定义

临时表仅存储了在事务或会话期间存在的数据。临时表中的数据是会话的私有数据,每个会话只能查看和修改自己的数据。

在必须使用到结果缓存的应用系统中,临时表尤为重要。

例如在一个基于Web的航空公司订票系统中,客户可以通过Web应用程序创建多个可选行程。每个行程将由临时表中信息来展示。应用程序对形成的更新修改会直接记录到临时表中,当客户决定最终行程方案后,应用程序会将该行程信息写入到指定的永久表中。

临时表通过“CREATE GLOBAL TEMPORARY TABLE”语句进行创建,ON COMMIT子句指示临时表中的数据是基于事务的(默认)还是基于会话的。

  • ON COMMIT DELETE ROWS

创建临时表默认的选项。临时表中的数据仅对当前事务有效,COMMIT完成后,临时表对应的临时段的内容将会被自动清空(TRUNCATE)。

  • ON COMMIT PRESERVE ROWS

临时表中的数据仅对当前会话有效,当会话结束后,临时表对应的临时段的内容将会被自动清空(TRUNCATE)。

以上两种策略的选择都不会影响临时表的元数据信息,会一致存储在数据字典中,因此需要对临时表的生命周期做合理配置,避免无用临时表信息存储在数据字典中。

3 国产数据库对临时表的支持

在找到的10家国产数据库资料中,临时表的支持情况统计如下,按照产品首字母进行排序。
20201112国产数据库临时表的支持说明水印.png

4 实操验证

首先通过Oracle 11g的实操来具体了解临时表的使用和特点,然后再通过Goldilocks 20c来对比验证。

4.1 Oracle 11g

事务级临时表

  1. [oracle@tank ~]$ sqlplus tank/tank
  2. SQL*Plus: Release 11.2.0.4.0 Production on Mon Feb 13 08:25:49 2017
  3. Copyright (c) 1982, 2013, Oracle. All rights reserved.
  4. Connected to:
  5. Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
  6. With the Partitioning, OLAP, Data Mining and Real Application Testing options
  7. TANK@tank> CREATE GLOBAL TEMPORARY TABLE T_TMP_TRAN
  8. (
  9. ID INT PRIMARY KEY,
  10. NAME VARCHAR(32)
  11. )
  12. ON COMMIT DELETE ROWS; 2 3 4 5 6
  13. Table created.
  14. TANK@tank> INSERT INTO T_TMP_TRAN VALUES(1,'TABLE T_TMP_TRAN');
  15. 1 row created.
  16. TANK@tank> SELECT * FROM T_TMP_TRAN;
  17. ID NAME
  18. ---------- --------------------------------
  19. 1 TABLE T_TMP_TRAN
  20. TANK@tank> COMMIT;
  21. Commit complete.
  22. TANK@tank> SELECT * FROM T_TMP_TRAN;
  23. no rows selected
  24. TANK@tank>

会话级临时表

  1. TANK@tank> CREATE GLOBAL TEMPORARY TABLE T_TMP_SESS
  2. (
  3. ID INT PRIMARY KEY,
  4. NAME VARCHAR(32)
  5. )
  6. ON COMMIT PRESERVE ROWS; 2 3 4 5 6
  7. Table created.
  8. TANK@tank> INSERT INTO T_TMP_SESS VALUES(1,'T_TMP_SESS');
  9. 1 row created.
  10. TANK@tank> SELECT * FROM T_TMP_SESS;
  11. ID NAME
  12. ---------- --------------------------------
  13. 1 T_TMP_SESS
  14. TANK@tank> COMMIT;
  15. TANK@tank> SELECT * FROM T_TMP_SESS;
  16. ID NAME
  17. ---------- --------------------------------
  18. 1 T_TMP_SESS
  19. --建立新的会话连接验证
  20. TANK@tank> connect tank/tank
  21. Connected.
  22. TANK@tank> SELECT * FROM T_TMP_SESS;
  23. no rows selected

4.2 Goldilocks 20c

事务级临时表

  1. [sunje@tank ~]$ gsql tank tank
  2. Copyright © 2010 SUNJESOFT Inc. All rights reserved.
  3. Release 20c 20.1.7 revision(31987)
  4. Connected to GOLDILOCKS Database.
  5. gSQL> CREATE GLOBAL TEMPORARY TABLE T_TMP_TRAN
  6. (
  7. ID INT PRIMARY KEY,
  8. NAME VARCHAR(32)
  9. )
  10. ON COMMIT DELETE ROWS; 2 3 4 5 6
  11. Table created.
  12. gSQL> INSERT INTO T_TMP_TRAN VALUES(1,'TABLE T_TMP_TRAN');
  13. 1 row created.
  14. gSQL> SELECT * FROM T_TMP_TRAN;
  15. ID NAME
  16. -- ----------------
  17. 1 TABLE T_TMP_TRAN
  18. 1 row selected.
  19. gSQL> COMMIT;
  20. Commit complete.
  21. gSQL> SELECT * FROM T_TMP_TRAN;
  22. no rows selected.

会话级临时表

  1. gSQL> CREATE GLOBAL TEMPORARY TABLE T_TMP_SESS
  2. (
  3. ID INT PRIMARY KEY,
  4. NAME VARCHAR(32)
  5. )
  6. ON COMMIT PRESERVE ROWS; 2 3 4 5 6
  7. Table created.
  8. gSQL> INSERT INTO T_TMP_SESS VALUES(1,'T_TMP_SESS');
  9. 1 row created.
  10. gSQL> SELECT * FROM T_TMP_SESS;
  11. ID NAME
  12. -- ----------
  13. 1 T_TMP_SESS
  14. 1 row selected.
  15. gSQL> COMMIT;
  16. Commit complete.
  17. gSQL> SELECT * FROM T_TMP_SESS;
  18. ID NAME
  19. -- ----------
  20. 1 T_TMP_SESS
  21. 1 row selected.
  22. --建立新的会话连接验证
  23. gSQL> connect tank tank
  24. gSQL> SELECT * FROM T_TMP_SESS;
  25. no rows selected.
  26. gSQL>

从临时表的语法和支持级别上来看,Goldilocks 20c和Oracle 11g一致。

参考资料

Oracle Concepts - Temporary Tables

https://docs.oracle.com/cd/E11882_01/server.112/e40540/tablecls.htm#CNCPT1138

Oracle Database Administrator’s Guide - Creating a Temporary Table

https://docs.oracle.com/cd/E11882_01/server.112/e25494/tables.htm#ADMIN11633

ORACLE临时表总结

https://www.cnblogs.com/kerrycode/p/3285936.html
高清关注二维码.png

国产数据库

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/1006151
推荐阅读
相关标签
  

闽ICP备14008679号