最近系統公升級,修改了資料庫的表字段,結果出現了問題,試了很久才找到問題,但還是不知道具體的原因。
問題如下:
sybase資料庫表tcz,應為業務需要,需在表中加乙個自增字段操作如下:
1、停止服務程式,不讓其往資料庫寫入資料。
2、把原來的表名改為tcz_old
3、新建表tcz,裡面增加id自增字段
4、把tcz_old表中的資料匯入到tcz表中
5、啟動服務程式。
啟動服務程式後發現寫入的資料是在tcz_old中而不是寫入tcz表中,重新啟動sybase資料庫也不管用。
後來發現服務程式是通過乙個儲存過程往tcz表寫的資料,所以把該儲存過程刪除後重新建立,
這時服務程式寫入的資料就寫入到tcz表而不是tcz_old表。
個人分析認為:
1、儲存過程是在第一次呼叫的時候編譯的,編譯後記錄了表的標識(id)而不是表名。
2、修改表名後並不會修改表的標識(id),所以儲存過程還是寫入原來記住的表。
3、儲存過程編譯後不是儲存在記憶體中,重啟sybase不會重新編譯儲存過程。
還沒有明白的地方是:
1、sybase的儲存過程的使用策略。
2、sybase儲存過程儲存在什麼地方。
Sybase 儲存過程GROUP
版本1 if object id dbo.statistics for ang is not null drop procedure dbo.statistics for ang gocreate procedure statistics for ang begin time date as beg...
sybase 儲存過程 示例
表 student 列 student id,name,age,teacher id 表 teacher 列 teacher id,name,age,salary,student num 需求 將性別和年齡符合給定條件的學生,都指派給指定的老師,並將學生的數量,更新到teacher表中。業務成功,則...
sybase儲存過程返回引數
drop procedure p get oclist with itemnumber go 定義輸入引數 orderno 輸出引數 oc list create procedure p get oclist with itemnumber orderno varchar 30 oc list va...