DB2 已声明的全局临时表

PCIe 6.0实战指南:从链路训练到信号完整性的避坑手册 本文是一份针对PCIe 6.0硬件工程师的实战避坑指南。文章深入解析了从NRZ到PAM4调制带来的信号完整性挑战,详细拆解了链路训练(LTSSM)的复杂过程与调试方法,并提供了从信道仿真到实验室实测(如使用Keysight示波器进行眼图与误码率分析)的完整信号完整性闭环验证策略,帮助工程师解决高速率下的链路不稳定与降速问题。 阅读详情
引用: http://www-128.ibm.com/developerworks/cn/db2/library/techarticles/dm-0311yip/index.html 内容: 简介 使用临时表 在 DB2 Development Center 中使用临时表 最后注意 参考资料 关于作者 对本文的评价 订阅: developerWorks 时事通讯 Paul Yip DB2 Partner Enablement,IBM Toronto 2003 年 11 月 本文阐述了如何在 DB2 通用数据库中使用已声明的全局临时表。这对于在应用程序与存储过程之间共享数据是一种十分有用的技术。本文适用于 DB2 UDB Version 8.1 for Linux,UNIX 和 Windows。 简介自 DB2 v7.2 以来,DB2 UDB 已经支持在驻留内存、非持久性、特定于会话的表中存储数据,这些表的正式名称为已声明的全局临时表(以下简称为临时表)。本文不会详述定义或使用临时表的各种方法(这些主题在 SQL Reference中已涵盖),而是重点介绍一种有趣而鲜为人知的技术,用于在应用程序与存储过程间共享临时表。 提示:如果您以前从未使用过临时表,请查阅 DB2 UDB v8 SQL Reference 第 5 章中标题 DECLARE GLOBAL TEMPORARY TABLE 下的内容。 使用临时表我们记得为了要使用临时表,数据库中必须存在一个用户临时表空间(默认情况下没有)。这里先教您如何创建这样一个表空间: create user temporary tablespace usertemp1 managed by system using ('usertemp1') 临时表在进行引用之前必须先声明。下面的 SQL 过程(从命令行创建)演示了这个过程: 清单 1. 在 SQL 过程中使用临时表的例子 db2 –td@ connect to sample @ create procedure temp_table_sample() specific temp_table_sample begin declare global temporary table -- (1) session.temp (id int, data varchar(10)) not logged on commit preserve rows; insert into session.temp values (1, 'A'); -- (2) end @ 提示:如果您想进一步寻找有关 DB2 SQL PL 的指南,请购买 DB2 SQL Procedural Language for Linux, UNIX, and Windows(ISBN 0131007726),可从任何在线书店订购。 只有在(2)处引用之前,先在(1)处声明临时表,该 SQL 过程才能起作用。 虽然临时表总是用于 SQL 过程中,但也能被任何可连接 DB2 的应用程序创建。下面很快就能看到,您甚至可以通过 DB2 命令行处理器(CLP)使用临时表。 当声明临时表的位置与使用它的位置不同时,会引起问题。考虑以下情况: 一个应用程序需要声明临时表 T,填充它后并调用过程 P 来处理数据。应用程序和过程 P 如何都能引用 T 而无需过程 P 再重复声明 T 呢? 存储过程 P1 声明临时表 T,填充它后并且希望调用过程 P2 和 P3 来处理数据。P2 和 P3 又如何能引用 P1 中声明的临时表而无需再重新声明呢? 这两种情况下,若在相同会话中企图重新声明临时表将导致如下错误: SQL0601N The name of the object to be created is identical to the existing name "SESSION.TEMP" of type "DECLARED TEMPORARY TABLE". SQLSTATE=42710 解决这些问题的关键是要明白如果您事先在当前的连接中已经声明了临时表,那么就可以创建存储过程来引用该临时表而无需再声明了。清单 2 举例说明了如何实现该方法: 清单 2. 在 SQL 过程中使用临时表的例子 CONNECT TO SAMPLE@ -- Declare a temporary table from CLP DECLARE GLOBAL TEMPORARY TABLE temp_employee LIKE employee ON COMMIT PRESERVE ROWS@ -- create a procedure which references the temporary table. CREATE PROCEDURE p1 RESULT SETS 1 BEGIN DECLARE cur CURSOR WITH HOLD WITH RETURN TO CLIENT FOR SELECT empno, firstnme, lastname FROM SESSION.temp_employee FETCH FIRST 5 ROWS ONLY; OPEN cur; END @ -- Now, from the CLP (an application) -- INSERT into the temp table INSERT INTO SESSION.temp_employee SELECT * FROM EMPLOYEE@ -- CALL the procedure, which returns an open cursor back to the -- CLP, proving that the temp table data was received. CALL p1@ 在上面的例子中,创建 CLP 连接后声明了一个临时表。然后创建了引用临时表的过程 p1。这里要注意的关键是,即使在过程体中没有声明临时表,该过程也被成功创建。为了证实此概念,创建过程后,我们手工填充了临时表,并调用 p1 来显示该表的内容。清单 3 给出了输出结果: 清单 3. 执行过程 p1 的输出 Result set 1 -------------- EMPNO FIRSTNME LASTNAME ------ ------------ --------------- 000010 CHRISTINE HAAS 000020 MICHAEL THOMPSON 000030 SALLY KWAN 000050 JOHN GEYER 000060 IRVING STERN 5 record(s) selected. Return Status = 0 既然我们已经利用有趣的方法创建了使用临时表的过程,接下来就演示临时表及其数据如何可以: 在两个或更多存储过程之间共享。 在一个应用程序和一个存储过程之间共享。 在 DB2 Development Center 中使用临时表步骤 1:在 Development Center 中,创建名为 init_temp() 的过程来封装临时表 session.temp 的声明。 清单 4. 封装临时表声明的过程 CREATE PROCEDURE INIT_TEMP() SPECIFIC INIT_TEMP BEGIN DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMP (id INT, data VARCHAR(10)) ON COMMIT PRESERVE ROWS; END 使用过程来初始化临时表可带来三个主要优点: 从 DB2 Development Center 很容易为数据库连接声明临时表。 过程开发人员不必为了得到临时表的 DDL 而找遍应用程序代码(可能是由其他人来维护的)。 如果在应用程序代码中的多个位置实例化相同的临时表,该表的定义可以集中在一个地方。因此,假如要求改变表结构,就不必搜索所有的声明,而只需在一个地方改变其定义。 步骤 2:在 Development Center 中,创建过程 close_temp() 来删除临时表 session.temp: 清单 5. 封装删除临时表的过程 CREATE PROCEDURE CLOSE_TEMP() SPECIFIC CLOSE_TEMP BEGIN DROP TABLE SESSION.TEMP; END 使用过程来删除临时表有以下两个优点: 在 DB2 Development Center 中执行操作时允许删除会话的临时表。 完成了通过存储过程声明临时表的封装。 注意:删除临时表并非是绝对必要的,因为当应用程序断开连接时它们就会被自动删除。然而,如果您的应用程序使用了连接池,那在返回到连接池的连接前就务必要删除临时表。 过程 init_temp() 和 close_temp() 为共享临时表奠定了基础。 例 1:创建引用临时表的过程步骤 1:在 Development Center 中,运行 init_temp() 过程 来声明 Development Center 的连接环境下的临时表。 图 1. 运行 init_temp Development Center 在过程运行完毕后还将保持连接状态。因此,在运行 close_temp() 或是重设 Development Center 的连接之前,该临时表依然继续存在。 步骤 2:创建以下过程 insert_to_temp() ,用于执行 session.temp 上的插入操作。请注意 insert_to_temp() 不需要再声明临时表了。 CREATE PROCEDURE INSERT_TO_TEMP() SPECIFIC INSERT_TO_TEMP BEGIN INSERT INTO SESSION.TEMP VALUES (1, 'one'); INSERT INTO SESSION.TEMP VALUES (2, 'two'); INSERT INTO SESSION.TEMP VALUES (3, 'three'); END 步骤 3:创建 count_rows()过程, 返回在临时表中找到的行数。再次说明,可以引用 session.temp 是因为在步骤 1 中我们调用了 init_temp()。 CREATE PROCEDURE COUNT_ROWS(OUT p_count INTEGER) BEGIN DECLARE cur CURSOR FOR SELECT count(*) FROM session.temp; OPEN cur; FETCH cur INTO p_count; CLOSE cur; END 步骤 4:运行 insert_to_temp() 。向临时表填充三行记录。 步骤 5:运行 count_rows() 。输出参数 p_count 将显示找到了 3 行记录。 图 2. 在两个过程间共享临时表 这个例子中,我们演示了如何在两个过程中共享一个临时表。当然,该技术能很容易地扩展为在任意多个过程间共享任意多个临时表。 步骤 6:删除。运行 close_temp() 来删除临时表。 例 2:在应用程序和存储过程之间共享临时表对于这些例子,我们将使用 CLP 作为应用程序。 步骤 1:连接数据库并运行 init_temp() 来声明 CLP 连接环境中的临时表。 CONNECT TO SAMPLE CALL INIT_TEMP() 步骤 2:向 session.temp 表插入几行记录。 INSERT INTO SESSION.TEMP VALUES (1, 'two') INSERT INTO SESSION.TEMP VALUES (2, 'two') 步骤 3:运行 count_rows() 过程,并确认该过程能够查看到刚才插入的行。 CALL count_rows(?) Value of output parameters -------------------------- Parameter Name : P_COUNT Parameter Value : 2 Return Status = 0 步骤 4:删除。运行 close_temp() 删除临时表。 CALL CLOSE_TEMP @ 这个例子中,我们演示了应用程序如何与存储过程共享临时表。 最后注意对已声明的全局临时表的支持在 DB2 UDB v8.1 中得到了显著的加强。比如,可以在上面创建索引和生成统计结果。您可以查阅 DB2 SQL Reference 中的 DECLARE GLOBAL TEMPORARY TABLE,那里有关于创建及使用临时表的全部详细过程。 临时表存储在用户临时表空间中。如果是使用大型数据集,可考虑用专用的缓冲池来代替表空间。可以通过表空间快照来决定是否将数据真正写入磁盘。 致谢作者要感谢 IBM Toronto Lab 的 Gustavo Arocena 帮助审阅了本文。 参考资料 您可以参阅本文在 developerWorks 全球站点上的 英文原文. DB2 UDB Documentation提供了有关本文中所讨论技术的更多信息。 要获得 SQL 过程语言的更多信息,Paul Yip、Drew Bradstock、Hana Curtis、Michael Gao、Zamil Janmohamed、Clara Liu 和 Fraser McArthur 合作编著的 DB2 SQL Procedural Language for Linux, UNIX and Windows (Prentice Hall,2002)一书就是很好的参考资料。 关于作者 Paul Yip 是来自于 IBM 多伦多实验室的顾问,该实验室负责开发 DB2 用于分布式平台的内核。他的首要任务是帮助 IBM 的业务合作伙伴从其他与之竞争的 RDBMS 平台迁移到 DB2,并加快他们进入市场的步伐。他已经为 DB2 开发者园地写了几篇文章,并且还是最近出版的 DB2 SQL Procedural Language for Linux, UNIX, and Windows 一书的作者之一。可通过 ypaul@ca.ibm.com 与他联系。
如何利用VS2017创建一个简单的窗口 #如何利用VS2017创建一个简单的窗口 1、新建->Windows桌面向导 2、应用程序类型->桌面应用程序,点击确定 3、点击调试->开始调试 可建立如下图的窗口 4、可以在生成的项目文件的中找到windows17_2的应用程序,打开界面如下: 注:新建空白项目也可以,注意在解决方案资源器中添加.cpp文件,如源.cpp文件,下载代码见博文 ... 阅读详情

相关推荐

3分钟接入满血版DeepSeek-R1:字节火山引擎手把手教程!免费50万tokens!

3分钟接入满血版DeepSeek-R1:字节火山引擎手把手教程!免费50万tokens!

hunteritself的博客 2万+

db2数据库常用语法及命令

转载

weixin_42149329的博客 8609

安卓App开发 篇三:Android SDK和API

Jetpack 是一个由多个库组成的套件,可帮助开发者遵循最佳做法、减少模板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者可将精力集中于真正重要的编码工作。hl=zh-cnhl=zh-cnWorkManager 是 Android Jetpack 的一部分,是用于持久性工作的推荐解决方案,适用于需要通过应用重启和系统重新启动来调度的工作,也是后台处理操作的主要推荐 API。立即执行:必须立即开始且很快完成的任务,可以加急,使用和Worker,通过对调用处理加急工作。

生活在别处 1239

GLOBAL TEMPORARY TABLE

转自:http://tolywang.itpub.net/index.phpCREATE GLOBAL TEMPORARY TABLE TABLENAME (COL1 VARCHAR2(10),COL2 NUMBER) ON COMMIT PRESERVE(DELETE) ROWS ;这种临时表不占用表空间,而且不同的SESSION之间互相看不到对方的数据在会话结束后表中的数据自动清空,如

冯立彬的博客 1万+

mybatis oracle 临时表,DB2 ORACLE 临时表创建

一、临时表临时表(TEMPORARY TABLE)通常应用在需要定义临时集合的场合。但是,在大部分需要临时集合的时候,我们根本就不需要定义临时表。当我们在一条SQL语句中只使用一次临时集合时,我们可以使用嵌套表表达式来定义临时集合;当我们在一条SQL语句中需要多次使用同一临时集合时,我们可以使用公共表表达式;只有当我们在一个工作单元中的多条SQL语句中使用同一临时集合时,我们才需要定义临时表。方法...

weixin_36227730的博客 1324

创建db2临时表 详解

第一步:先创建临时表空间: create user temporary tablespace test pagesize 4 k managed by system using ('[curdir]\temp'); 第二步:创建临时表declare global temporary table t1 like student on commit preserve rows

firebirdyes的专栏 1万+

MYSQL & DB2临时表

全局临时表的数据在所有会话结束后才会被清除。全局临时表全局临时表的生命周期与数据库的生命周期相同,即全局临时表的定义会一直存在于数据库中,直到被删除或数据库关闭。会话临时表:会话临时表仅在创建它的会话中可见,其他会话无法访问该表,因此会话临时表适用于需要会话私有数据的场景。全局临时表:多个会话可以同时读取和修改全局临时表的数据,这使得全局临时表适合用于多个会话之间共享数据的场景。会话临时表:会话临时表的生命周期与创建它的会话的生命周期相同,即会话临时表的定义会在会话结束时自动被删除。

shirsl的博客 4933

db2临时表

----start 临时表TEMPORARY TABLE)通常应用在需要定义临时集合的场合。但是,在大部分需要临时集合的时候,我们根本就不需要定义临时表。当我们在一条SQL语句中只使用一次临时集合时,我们可以使用嵌套表表达式来定义临时集合;当我们在一条SQL语句中需要多次使用同一临时集合时,我们可以使用公共表表达式;只有当我们在一个工作单元中的多条SQL语句中使用同一临时集合时,我...

jackssybin的专栏 1039

DB2——临时表

一、临时表 临时表TEMPORARY TABLE)通常应用在需要定义临时集合的场合。但是,在大部分需要临时集合的时候,我们根本就不需要定义临时表。当我们在一条SQL语句中只使用一次临时集合时,我们可以使用嵌套表表达式来定义临时集合;当我们在一条SQL语句中需要多次使用同一临时集合时,我们可以使用公共表表达式;只有当我们在一个工作单元中的多条SQL语句中使用同一临时集合时,我们才需要定义...

weixin_30781631的博客 803

DB2 9.7: 已创建的全局临时表 CGTT DGTT

简介如 DB2 9.7 for Linux, UNIX, and Windows Information Center(参见参考资料获取链接)所述,已创建的全局临时表DB2 9.7 中引入的一种全新的用户定义的临时表。在...

conghong0918的博客 830

db2 游标及其他

  定义游标:DECLARE 游标名 CURSOR FOR   Select 语句;打开游标:    OPEN 游标名;取值:     FETCH 游标名 INTO 变量列表例:DECLARE c1 CURSOR FORSELECT CAST(salary AS DOUBLE)FROM staffWHERE DEPT = deptNumberOR

houlc的专栏 7573

db2数据库存储过程入门4

例6: --在存储过程中声明变量 --在存储过程中建立临时表 --在存储过程中使用简单游标 create procedure test11(in sid integer) language sql begin  declare a integer;  declare global temporary table session.dtdoctype  (   id integer

long95wang的专栏 1794

SYBASE数据库迁移到AS 400 db2的FAQ

SYBASE数据库迁移到AS 400 db2的FAQ 1.Sybase数据类型和db2有那些不同? 答:Datetime 对应 timestamp Tinyint ,smallint 对应 smallint Money 类型对应 numeric(19,4)   2.db2数据库是否支持自增加列设置? 答:支持,例如:SYSID BIGINT GENERATED ALWAYS AS I

PANDS 2443

DB2数据库基础总结

一、db2 基础   基本语法   注释:“--”(两个减号)   字符串连接:“||”   如set msg=’aaaa’||’bbbb’,则msg为’aaaabbbb’   字符串的引用:‘’(一定用单引号),如果需要输入单引号,输入两个单引号即可。   语句结束:“;”   语法来源:PASCLE   转义字符:   如果你想查询字符串中包含‘%’或‘_’ ,就得使用转义字

项目管理之路 1704

DB2临时表空间的使用

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34024034的博客 1997

DB2临时表SQL过程

  版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。DB2临时表SQL过程和SQL语句中的测试总结 测试目标: 分别在SQL过程和SQL语句中创建临时表,并插入数据,看执行结果有什么异同。 测试环境: DB2 UDB V9.1 执行附件里面的SQL语句,得到一个表。  测试代码和运行结

silkss的专栏 1071

DB2表空间

DB2的体系层次结构 1)DB2从v9开始,可以在同一台物理服务器上安装多个版本的数据库;也就是说同一套操作系统下可以安装多个不同版本的实例。 2)1个操作系统可以创建一个或多个instance,1个实例可以对应1个或多个database 3)1个数据库对应1个或多个tablespace(表空间) 4)1个tablespace对应1个或多个容器 表空间 数据库中的所有数据都存储在许多表...

starryheavens的专栏 949

db2临时表存储过程中的使用

DROP PROCEDURE ADMINISTRATOR.SP_TEST (INTEGER, CHARACTER ()); CREATE PROCEDURE administrator.sp_test(P1 INT, P2 CHAR(20))DYNAMIC RESULT SETS 1MODIFIES SQL DATALANGUAGE SQLBEGIN DECLARE v_sqlstmt...

weixin_30346033的博客 2283

db2数据库存储过程入门3

例5: --在存储过程中声明变量 --在存储过程中建立临时表 create procedure test9(in sid integer , out result integer) language sql begin  declare a integer;  --global全局temporary是临时的,session本次会话  --翻译下就是:在本次会话中创建一个全局的临

long95wang的专栏 1242

DB2_全局变量

目的:测试DB2使用全局变量(是独立的数据库对象,支持read/write权限控制,数据会话间独立,类似于临时表),本脚本摘录自DB2安装目录admin_scripts/globvarsupport.db2。版本:Windows...

639

太公奇门排盘电脑版

太公奇门排盘电脑版

鲸鱼积木编程源码编程编写AI机器人编程

一款专门为人们打造的编程学习类型的应用软件,主要针对青少年而展开,为用户带去了丰富的编程知识和课程,且里面的内容还根据难易程度进行了划分,就算是新人小白也能找到适合自己的课程,实用性极强鲸鱼积木编程专业版,图形化编程软件,支持多款鲸鱼机器人,用于AI Module 9系列,本应用依赖无障碍权限实现手指模拟点击屏幕等操作,应用使用免费,助力零基础小白轻松学习编程,体验到编程的乐趣。兼具流程图、scratch、Python、C、模块编程等五种编程软件

上一篇: 开发中如何按需访问Eclipse Workspace
下一篇: 概要分析 SQL 过程
risker
博客等级 码龄26年 4粉丝 24原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值