3
Firebird和InterBase以BLR(標記化)格式保存已編譯的存儲過程和觸發器。Firebird BLR是否包含相關的字段大小?
但我真的不知道BLR的結構。
字段大小是BLR的一部分嗎?
當存儲過程包含兩個字段(源和目標)時我會遇到一些問題,後來我會更改這兩個字段的大小嗎?
例如他們是varchar(50)
長,但現在我將它們更改爲varchar(100)
與系統表更新。會發生什麼?它只會複製50個字符,或全部(100)?
還是BLR只包含對象鏈接(表和字段)?
我會嘗試與「僞」代碼來演示:
begin
for select comp_id, comp_name from companies where ...
into :ci, :cn
do begin
-- somehow we're adding this to another table
insert into new_clients (id, name) values (:ci, :cn);
end
end;
這可能是一個觸發器或存儲過程。
Comp_name
和new_clients.name
最初是varchar(50)
。- 我添加此過程或觸發器。它一天工作正常。
- 後來我意識到這些字段太短而不適合我的數據。
- 我使用GUI(例如IBExpert)將這些字段更改爲
varchar(150)
。 - 沒關係,現在都是
varchar(150)
。
然後會發生什麼?
- 如果BLR也包含字段大小,那麼無所謂我改變了字段的大小。觸發器複製50個字符,因爲它已預先編譯過之前的長度。
- 如果BLR只使用關聯/鏈接/標記到表和字段,我們可以更改字段而不用擔心複製功能。
問題是一樣的:BLR是否包含相關字段的大小?
你的答案是好的,但我的意思是領域而不是參數。我重新回顧了這個問題......對於誤解的內容感到抱歉。 – durumdara 2013-04-22 08:32:02
您可以按照我指出的方式檢查BLR。但不管它是否工作,我仍然不推薦系統表變化。 – 2013-04-22 10:36:50