Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
声明局部临时表。
DECLARE LOCAL TEMPORARY TABLE table-name ( { column-definition [ column-constraint ... ] | table-constraint | pctfree }, ... ) [ ON COMMIT { DELETE | PRESERVE } ROWS | NOT TRANSACTIONAL ]
pctfree : PCTFREE percent-free-space
percent-free-space : integer
ON COMMIT 子句 缺省情况下,临时表的行在执行 COMMIT 时删除。可以使用 ON COMMIT 子句在执行 COMMIT 时保留行。
NOT TRANSACTIONAL 子句 使用此子句创建的表不受 COMMIT 或 ROLLBACK 两者中任一个影响。在某些情况下,NOT TRANSACTIONAL 子句可以提高性能,因为对非事务性临时表执行的操作不会记入回退日志中。例如,在反复调用使用临时表的过程而不对 COMMIT 或 ROLLBACK 进行干预时,NOT TRANSACTIONAL 可能会非常有用。
对于局部临时表,不能使用 REFERENCES column-constraint 或 FOREIGN KEY 表约束。
DECLARE LOCAL TEMPORARY TABLE 语句用于声明临时表。
使用 DECLARE LOCAL TEMPORARY TABLE 创建的表不会出现在系统目录的 SYSTABLE 视图中。
当声明的临时表被显式删除或超出范围时,该表的行将被删除。也可以使用 TRUNCATE 或 DELETE 显式删除行。
复合语句中声明的局部临时表存在于复合语句中。否则,在连接断开前,声明的局部临时表会一直存在。
同一范围内的两个局部临时表不得同名。如果使用与某个基表相同的名称创建临时表,该基表只能在局部临时表的范围结束时,才能在连接中变为可见。任何一个连接不能使用与现有临时表相同的名称创建基表。
如果想要过程创建一个在过程完成后仍然存在的局部临时表,则改为使用 CREATE LOCAL TEMPORARY TABLE 语句。
无。
SQL/2008 DECLARE LOCAL TEMPORARY TABLE 是 SQL/2008 标准的可选语言功能 F531 的一部分。PCTFREE 和 NOT TRANSACTIONAL 子句是服务商扩充。通过该语句定义的列和约束定义也可以包括服务商扩充语法。在 SQL/2008 中,该标准规定通过 DECLARE LOCAL TEMPORARY TABLE 语句创建的表出现在系统目录中;但对于 SQL Anywhere 却不是这样。
Transact-SQL Adaptive Server Enterprise 不支持 DECLARE LOCAL TEMPORARY TABLE。在 Sybase Adaptive Server Enterprise 中,使用 CREATE TABLE 语句通过以特殊字符 # 开头的表名创建临时表。
下面的示例阐释如何在存储过程中声明临时表:
BEGIN DECLARE LOCAL TEMPORARY TABLE TempTab ( number INT ); ... END