DB2临时表在SQL过程和SQL语句中的测试总结

简介:
 
测试目标
 
分别在SQL过程和SQL语句中创建临时表,并插入数据,看执行结果有什么异同。
 
测试环境
 
DB2 UDB V9.1
 
执行附件里面的SQL语句,得到一个表。
 
 
测试代码和运行结果
 
一、临时表在SQL语句中
 
-- 定义一个全局临时表SESSION.RESULT
DECLARE GLOBAL TEMPORARY TABLE SESSION.RESULT
    ( 
         TMP_HYDM   VARCHAR(10),    -- 行业代码
         TMP_HYMC   VARCHAR(300)   -- 行业名称
    )
     WITH REPLACE
  NOT LOGGED;  
-- 插入数据到临时表   
INSERT INTO  SESSION.RESULT
SELECT MLDM,MLMC FROM DM_HY_CY;
 
-- 查询临时表数据   
SELECT * FROM SESSION.RESULT;
 
测试结果:以上SQL代码正常执行,但是没有查询到任何数据。
 
 
二、临时表在SQL存储过程中
 
CREATE PROCEDURE SP_TEST_TMEP (  )
        DYNAMIC RESULT SETS 1
------------------------------------------------------------------------
-- 语言:DB2 SQL 存储过程
 
-- 说明:用来测试通过查询插入临时表数据
-- 作者:熔 岩
-- 日期:2008-08-31
------------------------------------------------------------------------
P1: BEGIN
        -- 定义一个全局临时表SESSION.RESULT
        DECLARE GLOBAL TEMPORARY TABLE SESSION.RESULT
            ( 
                        TMP_HYDM   VARCHAR(10),   -- 行业代码
                        TMP_HYMC   VARCHAR(300)   -- 行业名称
            )
             WITH REPLACE       -- 如果存在此临时表,则替换                            
                 NOT LOGGED;    -- 不在日志里纪录
 
 
        -- 插入数据到临时表
        INSERT INTO  SESSION.RESULT
        SELECT MLDM,MLMC FROM DM_HY_CY;
 
P2: BEGIN
        -- 游标对客户机应用程序保持打开
        DECLARE CUR_RES CURSOR WITH RETURN FOR
                SELECT * FROM SESSION.RESULT;
        OPEN CUR_RES;
END P2;
END P1
 
测试结果:存储过程执行成功,并返回了插入的目标数据。
 
测试总结
 
1、在SQL语句中,构建临时表是没有意义的,因为当SQL语句执行处于自动提交模式下时,执行后就COMMIT了,而一旦执行了COMMIT语句,临时表将从内存中清除。
 
2、在SQL过程中,临时表定义后,如果没有显式执行到COMMIT语句,则临时表一直存在。并且临时表支持INSERT INTO ... SELECT ... 的语句。
 
3、在DB2下,临时表的模式必须为SESSION,SESSION模式下表是一个内存表,这个SESSION是DB2特有的SCHEMA,SESSION对象的声明周期仅仅限于一次数据连接“会话”,一旦会话结束,SESSION对象就被从内存中清除了,这和JSP中的内置对象SESSION类似。


本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/40486,如需转载请自行联系原作者
相关文章
|
3月前
|
SQL 存储 数据库
Python 的安全性和测试:什么是 SQL 注入攻击?如何防范 SQL 注入?
Python 的安全性和测试:什么是 SQL 注入攻击?如何防范 SQL 注入?
|
4月前
|
SQL 数据库
SQL 中的 NULL 值:定义、测试和处理空数据,以及 SQL UPDATE 语句的使用
NULL 值是指字段没有值的情况。如果表中的字段是可选的,那么可以插入新记录或更新记录而不向该字段添加值。此时,该字段将保存为 NULL 值。需要注意的是,NULL 值与零值或包含空格的字段不同。具有 NULL 值的字段是在记录创建期间留空的字段。
56 0
|
4月前
|
SQL 安全 关系型数据库
supersqli(SQL注入流程及常用SQL语句)
supersqli(SQL注入流程及常用SQL语句)
90 0
|
4月前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
73 0
|
2月前
|
SQL 安全 关系型数据库
接上篇文章,在测试宝塔 WAF 的未授权访问漏洞时无意间还发现了一个 SQL 注入漏洞
接上篇文章,在测试宝塔 WAF 的未授权访问漏洞时无意间还发现了一个 SQL 注入漏洞,品相还不错,可执行任意 SQL 语句。 总之,吃了一惊,一个防 SQL 注入的工具居然也有 SQL 注入漏洞。 请看这段代码
413 1
|
6月前
|
SQL Java 数据库连接
mybatis之动态SQL测试环境的搭建以及if语句的使用~
mybatis之动态SQL测试环境的搭建以及if语句的使用~
mybatis之动态SQL测试环境的搭建以及if语句的使用~
|
2月前
|
SQL 关系型数据库 MySQL
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
49 0
|
1月前
|
SQL 存储 关系型数据库
SQL的基本语法以及SQL语句的关键字的使用,SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、DROP等。
SQL的基本语法以及SQL语句的关键字的使用,SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、DROP等。
|
1月前
|
SQL 存储 缓存
【SQL】Mysql中一条sql语句的执行过程
【SQL】Mysql中一条sql语句的执行过程
30 0
|
1月前
|
SQL 关系型数据库 MySQL
干货!SQL性能优化,书写高质量SQL语句
干货!SQL性能优化,书写高质量SQL语句
31 2