資料庫 儲存過程互相呼叫時 臨時表的命名注意點

2022-02-21 00:53:15 字數 871 閱讀 9930

最近寫了兩個儲存過程,它們相互之間會互相呼叫。在資料庫中直接測試執行時都沒有問題,在**中傳入引數呼叫後發現會有報錯。

折騰了乙個下午之後,還是組長找出故障原因出來。

原來互相呼叫的兩個儲存過程中,臨時表或變數的命名最好得有所區別,否則會呼叫錯誤,導致執行出錯。

我簡短地寫兩個儲存過程來示範一下,不一定能執行起來,能看懂就行。

ps_day

create procedure [ps_day]

asbegin

select col1,col2

into #temp

from history

select * from #temp

endgo

ps_month

create procedure [ps_month]

asbegin

declare @date datetime,@i int

set @date = dateadd(m,-1, getdate())

set @i = 0

while(@i<30)

begin

select col1 ,0 as col3

into #temp

exec @ps_day

set @i= @i + 1

endselect col3

from #temp

endgo

執行ps_month後,會發現【列名 col2 無效】的錯誤。

將ps_day,ps_month的臨時表分別改為 #temp1、#temp2後,發現該錯誤消失了。

資料庫儲存過程及其呼叫

內容 儲存過程格式 定時呼叫儲存過程 詳情 1 儲存過程格式begin declare b int default 0 declare nowa int declare nowb varchar 20 charset utf8 default declare user cursor cursor f...

資料庫臨時表

建立方法 方法一 createtable temptablename 或select 欄位1,欄位2,into temptablename from table 方法二 createtable tempdb mytemptable tidint 說明 1 臨時表其實是放在資料庫tempdb裡的乙個使...

資料庫表(臨時表)

oracle中的段 segment 是占用磁碟上儲存空間的乙個物件。儘管有多種型別,不過最常見的段型別如下 q 聚簇 cluster 這種段型別能儲存表。有兩種型別的聚簇 b 樹聚簇和雜湊聚簇。聚簇通常用於儲存多個表上的相關資料,將其 預聯結 儲存到同乙個資料庫塊上 還可以用於儲存乙個表的相關資訊。...