1. 苏葳的备忘录首页
  2. 数据库

Sybase中父过程与子过程中临时表的作用域测试

sybase 临时表Sybase的临时表是一个存放在系统库tempdb中的表对象。表名前加上#号,就表示你创建的是一个临时表。在执行一些复杂查询的时候,临时表能够作为临时数据存储中间结果,从而简化查询的复杂度,适当的使用临时表还能大大提高查询效率。临时表通常只对创见者可见,虽然鼓励用户在结束之前清理临时表,但系统仍会对临时表进行管理,并在用户退出时自动删除仍存在的临时表。

先执行:

select top 10 * into #zz1 from ktran
go
create proc testpc2
as
begin
select * from #zz1
select top 10 * into #zz2 from kbrch
end
go
drop table #zz1
go

后执行:

select top 10 * into #zz2 from kbrch
go
create proc testpc1
as
begin
select top 10 * into #zz1 from ktran
exec testpc2
select * from #zz2
end
go
drop table #zz2
go

只有这样,才能正常创建两个过程,因sybase存储过程的特点,若里面所用到的表在过程创建时不存在,则会报错而无法继续,对临时表也一样。

testpc1过程中,创建临时表#zz1,然后调用testpc2过程,在testpc2中查询显示#zz1的内容,可见能够正常显示。而在testpc2中创建了临时表#zz2,待testpc1中调用完testpc2后查询#zz2表时,却显示无此对象。可以验证,父过程中的临时表对子过程可见可用,而子过程中的临时表在执行结束后释放,因而对父过程是不可见的。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/530.html

发表评论

邮箱地址不会被公开。 必填项已用*标注