- 浏览: 465064 次
- 性别:
- 来自: 潘多拉
文章分类
最新评论
-
lijunwyf:
代码好像不完整,后端没串起来的感觉
Json-RPC for java首次尝试 -
jerry.chen:
我用这种方式去,貌似没啥效果,楼主!
Xfire开发的webservice客户端超时问题解决 -
漫步邃思:
这个问题常遇到,老是想不起来解决方法,记住了
resin3.1.0无法解析EL表达式问题解决 -
dampce032:
在不删掉integratedSecurity=true;的情况 ...
JDBC 连接SQLServer数据库(Failed to load the sqljdbc_auth.dll) -
kill_e680:
取CPU号和取硬盘号,在linux下可以用吗?
sigar使用:在web中应用sigar取得系统信息
1、MS SQLSERVER
SQL Server 支持临时表。临时表就是那些名称以井号 (#) 开头的表。如果当用户断开连接时没有除去临时表,SQL Server 将自动除去临时表。临时表不存储在当前数据库内,而是存储在系统数据库 tempdb 内。
临时表有两种类型:
本地临时表:本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 Microsoft SQL Server 2000 实例断开连接时被删除。
全局临时表:全局临时表的名称以数学符号 (##) 打头,创建后对任何用户都是可见的。如果在创建全局临时表的连接断开前没有显式地除去这些表,那么只要所有其它任务停止引用它们,这些表即被除去。当创建全局临时表的连接断开后,新的任务不能再引用它们。当前的语句一执行完,任务与表之间的关联即被除去;因此通常情况下,只要创建全局临时表的连接断开,全局临时表即被除去。
例如,如果创建名为 employees 的表,则任何人只要在数据库中有使用该表的安全权限就可以使用该表,除非它已删除。如果创建名为 #employees 的本地临时表,只有您能对该表执行操作且在断开连接时该表删除。如果创建名为 ##employees 的全局临时表,数据表中的任何用户均可对该表执行操作。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果该表在您创建后有其他用户使用,则 SQL Server在所有用户断开连接后删除该表。
现在,临时表的许多传统用途可由具有 table 数据类型的变量替换。
2、ORACLE
Oracle支持临时表。临时表用来保存事务或会话期间的中间结果。在临时表中保存的数据只有对当前会话是可见的,任何会话都不能看到其他会话的数据,即使在当前会话COMMIT数据以后也是不可见的。多用户并行不是问题,一个会话从来不阻塞另一个会话使用临时表。即使锁定临时表,一个会话也不会阻塞其他会话使用临时表。临时表比正常表产生的REDO少得多,然而,由于临时表必须产生包含数据的UNDO信息,所以会产生一定数量的REDO日志。
临时表将从用户临时表空间的的目前日志中分配空间,或者如果从有定义权的程序中访问,将使用程序所有者的临时表空间。全局临时表实际上只是表本身的模板。创建临时表的行为不包括存储空间的分配,也不包括INITIAL的分配。因此,在运行时当一个会话首先将数据放到临时表中时,这时将创建这个会话的临时段。由于每个会话获取自己的临时段,每个用户可能在不同的表空间中为临时表分配空间。USER1的default临时表空间为TEMP1,他的临时表将从 TEMP1中分配空间,USER2的default临时表空间为TEMP2,他的临时表将从TEMP2中分配空间。
临时表在每个数据库中只需创建一次,不必在每个存储过程中创建。临时表总是存在的,除非手动的删除他。临时表作为对象存在数据字典中,并且总是保持为空,直到有会话在其中放入数据。Oracle允许创建基于临时表的视图和存储过程。
临时表可以是以会话为基础的,也可以是以事务为基础的。ON COMMIT PRESERVE ROWS子句使临时表成为基于会话的模式。行将留在此表中,直到会话断开或通过DELETE或TRUNCATE从物理上删除这些行。ON COMMIT DELETE ROWS子句使临时表成为基于事务的模式。当会话提交后,行消失。这个临时表的自动清除过程不会有额外的开销。
在oracle中,应用程序需要的临时表应该在程序安装时创建,而不是在程序运行时创建。(这是与ms sqlserver或sybase的使用的不同)
在任何数据库中,临时表的一个缺点是:事实上优化器在临时表中没有真正的统计功能。然而,在oracle中,一系列较好的统计猜测可以通过DBMS_STATS包在临时表中设置。
3、DB2
可使用 DECLARE GLOBAL TEMPORARY TABLE 语句来定义临时表。DB2的临时表是基于会话的,且在会话之间是隔离的。当会话结束时,临时表的数据被删除,临时表被隐式卸下。对临时表的定义不会在SYSCAT.TABLES中出现
下面是定义临时表的一个示例:
此语句创建一个名为 gbl_temp 的用户临时表。定义此用户临时表 所使用的列的名称和说明与 empltabl 的列的名称和说明完全相同。隐式定义只包括列名、数据类型、可为空特性和列缺省值属性。未定义所有其他列属性,包括唯一约束、外部关键字约束、触发器和索引。执行 COMMIT 操作时,若未对该表打开 WITH HOLD 游标,则该表中的所有数据都被删除。不记录对用户临时表所作的更改。用户临时表被放在指定的用户临时表空间中。此表空间必须存在,否则此表的声明将失败。
户定义临时表不支持:
1. LOB 类型的列(或基于 LOB 的单值类型列)
2. 用户定义类型列
3. LONG VARCHAR 列
4. DATALINK 列
其创建方法:
create table TempTableName,
或
select [字段1,字段2,...,] into TempTableName from table ,如上所说.
而后便可像使用常规表一样使用它们.
临时表其实是放在数据库tempdb里的一个用户表
分两种:
一种是以#(局部)或##(全局)开头的表,这种表在会话期间存,会话结束则自动删除;
另一种,如果创建时不以#或##开头,而用tempdb.TempTable来命名它,则该表可在数据库重启前一直存在.
以上两种都可手动用
drop table TempTableName 来删除.
请参考---动态sql语句基本语法
1 :普通SQL语句可以用Exec执行
eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' --请注意字符串前一定要加N
2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
eg:
示例:
使用临时表要特别注意:
1:jdbc一定要加上事务控制,否则当多线程执行时,有可能使用的是同一个connection,那么在一个thread里创建的
临时表还没等被删除,另一个thread又要创建同名的临时表。这是就会报异常,说这个临时表已经存在了。
2:在同一个transaction里,不要使用同名的临时表,否则同样会报临时表已经存在了的异常,在同一个dao里,也许没有人会傻到重复创建临时表,在dao中不同的方法里使用相同的临时表的名字也是危险的,如果这两个dao方法被同一个service方法调用,而这个service存在又是使用spring来管理transaction,那么,实际上者两个dao方法使用的是同一个connection,如果两个dao方法里使用同名临时表,那么后调用的dao方法就会报异常,说临时表已经存在。
经验总结:
1:事务一定要加上事务控制。
2:不同dao方法里的临时表名要不同。
SQL Server 支持临时表。临时表就是那些名称以井号 (#) 开头的表。如果当用户断开连接时没有除去临时表,SQL Server 将自动除去临时表。临时表不存储在当前数据库内,而是存储在系统数据库 tempdb 内。
临时表有两种类型:
本地临时表:本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 Microsoft SQL Server 2000 实例断开连接时被删除。
全局临时表:全局临时表的名称以数学符号 (##) 打头,创建后对任何用户都是可见的。如果在创建全局临时表的连接断开前没有显式地除去这些表,那么只要所有其它任务停止引用它们,这些表即被除去。当创建全局临时表的连接断开后,新的任务不能再引用它们。当前的语句一执行完,任务与表之间的关联即被除去;因此通常情况下,只要创建全局临时表的连接断开,全局临时表即被除去。
例如,如果创建名为 employees 的表,则任何人只要在数据库中有使用该表的安全权限就可以使用该表,除非它已删除。如果创建名为 #employees 的本地临时表,只有您能对该表执行操作且在断开连接时该表删除。如果创建名为 ##employees 的全局临时表,数据表中的任何用户均可对该表执行操作。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果该表在您创建后有其他用户使用,则 SQL Server在所有用户断开连接后删除该表。
现在,临时表的许多传统用途可由具有 table 数据类型的变量替换。
2、ORACLE
Oracle支持临时表。临时表用来保存事务或会话期间的中间结果。在临时表中保存的数据只有对当前会话是可见的,任何会话都不能看到其他会话的数据,即使在当前会话COMMIT数据以后也是不可见的。多用户并行不是问题,一个会话从来不阻塞另一个会话使用临时表。即使锁定临时表,一个会话也不会阻塞其他会话使用临时表。临时表比正常表产生的REDO少得多,然而,由于临时表必须产生包含数据的UNDO信息,所以会产生一定数量的REDO日志。
临时表将从用户临时表空间的的目前日志中分配空间,或者如果从有定义权的程序中访问,将使用程序所有者的临时表空间。全局临时表实际上只是表本身的模板。创建临时表的行为不包括存储空间的分配,也不包括INITIAL的分配。因此,在运行时当一个会话首先将数据放到临时表中时,这时将创建这个会话的临时段。由于每个会话获取自己的临时段,每个用户可能在不同的表空间中为临时表分配空间。USER1的default临时表空间为TEMP1,他的临时表将从 TEMP1中分配空间,USER2的default临时表空间为TEMP2,他的临时表将从TEMP2中分配空间。
临时表在每个数据库中只需创建一次,不必在每个存储过程中创建。临时表总是存在的,除非手动的删除他。临时表作为对象存在数据字典中,并且总是保持为空,直到有会话在其中放入数据。Oracle允许创建基于临时表的视图和存储过程。
临时表可以是以会话为基础的,也可以是以事务为基础的。ON COMMIT PRESERVE ROWS子句使临时表成为基于会话的模式。行将留在此表中,直到会话断开或通过DELETE或TRUNCATE从物理上删除这些行。ON COMMIT DELETE ROWS子句使临时表成为基于事务的模式。当会话提交后,行消失。这个临时表的自动清除过程不会有额外的开销。
在oracle中,应用程序需要的临时表应该在程序安装时创建,而不是在程序运行时创建。(这是与ms sqlserver或sybase的使用的不同)
在任何数据库中,临时表的一个缺点是:事实上优化器在临时表中没有真正的统计功能。然而,在oracle中,一系列较好的统计猜测可以通过DBMS_STATS包在临时表中设置。
3、DB2
可使用 DECLARE GLOBAL TEMPORARY TABLE 语句来定义临时表。DB2的临时表是基于会话的,且在会话之间是隔离的。当会话结束时,临时表的数据被删除,临时表被隐式卸下。对临时表的定义不会在SYSCAT.TABLES中出现
下面是定义临时表的一个示例:
DECLARE GLOBAL TEMPORARY TABLE gbl_temp LIKE empltabl ON COMMIT DELETE ROWS NOT LOGGED IN usr_tbsp
此语句创建一个名为 gbl_temp 的用户临时表。定义此用户临时表 所使用的列的名称和说明与 empltabl 的列的名称和说明完全相同。隐式定义只包括列名、数据类型、可为空特性和列缺省值属性。未定义所有其他列属性,包括唯一约束、外部关键字约束、触发器和索引。执行 COMMIT 操作时,若未对该表打开 WITH HOLD 游标,则该表中的所有数据都被删除。不记录对用户临时表所作的更改。用户临时表被放在指定的用户临时表空间中。此表空间必须存在,否则此表的声明将失败。
户定义临时表不支持:
1. LOB 类型的列(或基于 LOB 的单值类型列)
2. 用户定义类型列
3. LONG VARCHAR 列
4. DATALINK 列
其创建方法:
create table TempTableName,
或
select [字段1,字段2,...,] into TempTableName from table ,如上所说.
而后便可像使用常规表一样使用它们.
临时表其实是放在数据库tempdb里的一个用户表
分两种:
一种是以#(局部)或##(全局)开头的表,这种表在会话期间存,会话结束则自动删除;
另一种,如果创建时不以#或##开头,而用tempdb.TempTable来命名它,则该表可在数据库重启前一直存在.
以上两种都可手动用
drop table TempTableName 来删除.
请参考---动态sql语句基本语法
1 :普通SQL语句可以用Exec执行
eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' --请注意字符串前一定要加N
2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
eg:
declare @fname varchar(20) set @fname = 'FiledName' Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 Exec('select ' + @fname + ' from tableName') -- 请注意加号前后的单引号的边上加空格 当然将字符串改成变量的形式也可 declare @fname varchar(20) set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) set @s = 'select'+ @fname + ' from tableName' Exec(@s) -- 成功 exec sp_executesql @s --此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) set @s = 'select ' + @fname + ' from tableName' Exec(@s) --成功 exec sp_executesql @s --此句正确 3. 输出参数 declare @num int, @sqls nvarchar(4000) set @sqls='select count(*) from tableName' exec(@sqls) --如何将exec执行结果放入变量 declare @num int, @sqls nvarchar(4000) set @sqls='select @a=count(*) from tableName ' exec sp_executesql @sqls,N'@a int output',@num output select @num DECLARE @fname varchar(20), @dyni_SQL varchar(8000), @pcur_day varchar(20) create table #tp_res( f1 smalldatetime NULL, f2 smallint NULL, f3 float NULL ) set @fname='f1' set @dyni_SQL='insert into #tp_res' + ' ( ' + @fname + ') values (''' + @pcur_day+ ''')' exec (@dyni_SQL) select * from #tp_res drop table #tp_res --需要注意,如果字段是数值型,不要用单引号,其他如字符型和日期型都要单引号即: set @dyni_SQL='insert into #tp_res' + ' ( ' + @fname + ') values (' + cast(@pcur_day as varchar(50))+ ')'
示例:
select * into #tb_demo from employee select * into #tb_demo1 from jobs select * from #tb_demo left join #tb_demo1 on #tb_demo.job_id=#tb_demo1.job_id drop table #tb_demo drop table #tb_demo1
使用临时表要特别注意:
1:jdbc一定要加上事务控制,否则当多线程执行时,有可能使用的是同一个connection,那么在一个thread里创建的
临时表还没等被删除,另一个thread又要创建同名的临时表。这是就会报异常,说这个临时表已经存在了。
2:在同一个transaction里,不要使用同名的临时表,否则同样会报临时表已经存在了的异常,在同一个dao里,也许没有人会傻到重复创建临时表,在dao中不同的方法里使用相同的临时表的名字也是危险的,如果这两个dao方法被同一个service方法调用,而这个service存在又是使用spring来管理transaction,那么,实际上者两个dao方法使用的是同一个connection,如果两个dao方法里使用同名临时表,那么后调用的dao方法就会报异常,说临时表已经存在。
经验总结:
1:事务一定要加上事务控制。
2:不同dao方法里的临时表名要不同。
发表评论
-
eclipse
2012-01-19 10:19 976eclipse操作常识:eclipse进行项目开发时往往会遇 ... -
sigar使用:在web中应用sigar取得系统信息
2012-01-18 14:19 3329[转] import java.io.IOExce ... -
解决struts1.x表单重复提交问题
2012-01-17 10:40 2371每次填写完表单后单击提交后,struts中action执行相关 ... -
在树初始化时,加一个load图片
2012-01-16 09:45 1854做个浮动图层放在 zTree 上面, 然后利用 asnycS ... -
利用JS做到隐藏div和显示div
2012-01-16 09:05 108784div的visibility可以控制div的显示和隐藏,但是隐 ... -
虚拟机使用NAT不能上网
2012-01-05 08:41 3014虚拟机上网问题 许多虚拟机的初学者,都会询问这样一个问题:在 ... -
[转]用eclipse pdt 配置php开发,调试环境
2011-12-30 16:15 1528本文档是windows操作系统下php开发环境的配置。 1 ... -
RESIN 连接池数据库密码加密方法
2011-12-28 15:34 1634[转] Resin 连接池写在resin.conf里 ... -
好的技术博客
2011-12-28 15:18 878http://www.findjar.com/index.x ... -
利用jawin完成调用window中dll的调用
2011-12-28 15:14 2127[转] Java/Win32互动项目( Jawin)是 ... -
WebService的测试
2011-12-20 09:26 1485在浏览器中输入地址:http://localhost ... -
我的SQLSERVER 分页存储过程
2011-12-13 08:54 3206/** * procedure name : kk_f ... -
Myeclipse中将Web项目发布时重命名
2011-12-12 09:58 1164选中项目->反键->Properties ... -
Sql xtype 类型
2011-11-30 09:39 1254sysobjects 表 在数据库内创建的每个对象(约束、默认 ... -
使用SQL语句清空数据库所有表的数据[转]
2011-11-30 09:14 805近来发现数据库过大,空间不足,因此打算将数据库的数据进行全面的 ... -
js实现焦点进入文本框内关闭输入法
2011-11-30 08:56 3566要用到的东西: imeMode:xxx 有四个参数 act ... -
数据库设计三大范式应用实例剖析[转]
2011-11-29 17:25 797数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数 ... -
Ajax.Request方法
2011-11-29 13:47 1283Prototype 的 Ajax.Request 对象绑定了浏 ... -
测试sql语句性能
2011-11-25 17:22 1052[size=medium]有时候我们经常为我们的sql语句执行 ... -
quartz cronExpression配置说明
2011-11-18 15:26 1319字段 允许值 ...
相关推荐
首先,我们有两个表:`T_U_TEMPLATE`(模板表)和`TEMPLATE_TEMP_CREATE`(模板临时表)。这两个表都有一个共同的字段`TEMPLATE_CODE`,这是它们之间进行数据匹配的关键字段。`T_U_TEMPLATE`表包含了更多的信息,如`...
1. 在`handler`函数中,首先创建一个临时克隆的列数组`tempClonedColumns`,使用`_assist.deepCopy`深拷贝当前的`columns`属性。 2. 使用这个克隆的数组来生成具有唯一ID的列`colsWithId`,这一步与原来的代码保持...
7. **优化参数**:如 `thread_cache_size`(线程缓存大小)、`tmp_table_size` 和 `max_heap_table_size`(临时表的最大内存大小)。 正确理解和配置my.cnf_template文件是管理MySQL服务器的关键,它允许管理员根据...
首先,脚本创建了一个名为`@temtb`的临时表,用于存储一组`appt_id`值。这一步骤通常是为后续操作做准备,比如根据这些`appt_id`来更新或删除相关的记录。 ```sql DECLARE @temtb TABLE(appt_id VARCHAR(400)) ...
- **MySQL Table Locks**:监控表锁定的状态。 - **MySQL Temporary Objects**:监控临时对象的使用情况。 - **MySQL Transaction Handler**:监控事务处理器的状态。 通过以上指标,可以全面地监控MySQL数据库的...
1. 使用`CREATE TABLE`语句创建表,例如`CREATE TABLE pokes (foo INT, bar STRING)`创建了一个名为pokes的表,包含两个字段foo和bar。 2. `LIKE`操作可以用来创建一个与已有表结构相同的表,例如`CREATE TABLE new_...
-- 更多表单项... --> methods: { handleAdd() { this.tableData.push(this.newItem); this.$refs.form.resetFields(); // 清空表单 this.newItem = {}; // 重置新数据对象 }, }, data() { return { new...
3. 使用联合(UNION)来替代手动创立临时表。 4. 事务处理,例如保证数据完整性,例如添加和修改同步,两者成立则都执行,一者失败都失败。 5. 锁定表,优化事务处理,例如使用 LOCK TABLE 语句来锁定表,保证在 ...
- 使用UNION代替临时表操作,简化代码。 - 事务处理确保数据一致性,如示例所示,使用BEGIN、COMMIT和ROLLBACK。 - 锁定表优化并发操作,例如使用`LOCK TABLES`和`UNLOCK TABLES`确保数据一致性。 10. 其他MySQL...
(3)使用联合(UNION)来代替手动创建的临时表。 (4)事务处理:保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败。 (5)锁定表,优化事务处理:使用 LOCK TABLE 语句可以保证在 UNLOCK ...
最后,`VC++实现对象序列化到sqlite表blob类型字段中.cpp`这个文件名表明了源代码会提供一个完整的实现,包括了对象序列化、数据库连接、数据操作等步骤。你可以参考这个文件来了解整个流程的具体细节。 总之,VS和...
Table(表)组织数据,Paragraph(段落)是文本的基本结构,Symbol(符号)包括特殊字符,Style(风格)定义文本格式,Execute(执行)运行程序或命令,Graphics(图形)和Image(图像)涵盖视觉元素。 最后,提到...
在Python的Web开发框架Flask和Django中,有时候我们需要处理多张结构相同的表,但表名根据时间或其他标识变化,例如`table_201706`、`table_201707`等。在这种情况下,手动为每张表创建单独的Model类并不高效。本文...
58. **Template**:模板是预设的布局或设计,便于快速创建新的文档。 59. **Page Setup**:页面设置用于调整打印输出的样式和布局。 60. **Password/Code**:口令和密码用于保护数据的安全。 61. **Print Preview...
- **SYBASE**与**ORACLE**都支持临时表的使用,但在具体的创建和管理方式上可能有所区别。 #### 九、SYBASE移植步骤 **1. 移植方案讨论** - 需要根据现有的系统架构和业务需求制定详细的移植计划。 **2. SYBASE...
STL容器主要基于广泛使用的数据结构实现,涵盖了多种类型的数据结构,如数组(array)、向量(vector)、列表(list)、树(tree)、栈(stack)、队列(queue)、散列表(hash table)、集合(set)、映射表(map)等。这些数据结构...
3. **RAM** (Random Access Memory):随机存取内存,临时存储运行中的程序和数据,断电后数据会丢失。 4. **ROM** (Read Only Memory):只读存储器,存储固定不变的信息,如BIOS。 5. **Floppy Disk**:软盘,一种...
3. **RAM (Random Access Memory)**:随机存取内存,是计算机的临时工作空间,用于存储正在运行的应用程序和数据。 4. **ROM (Read Only Memory)**:只读存储器,存储固定不变的数据,即使断电也不会丢失。 5. **...