Firebird と InterBase は、コンパイルされた形式のストアド プロシージャとトリガーを BLR (トークン化) 形式で保持します。
しかし、BLRの構造はよくわかりません。
フィールド サイズは BLR の一部ですか?
ストアド プロシージャに 2 つのフィールド (コピー元とコピー先) が含まれていて、後でこれら 2 つのフィールドのサイズを変更する場合、問題が発生しますか?
たとえば、それらは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)
です。- この手順またはトリガーを追加します。1日問題なく稼働しています。
- 後で、これらのフィールドが短すぎてデータに適合しないことに気付きました。
- GUI (IBExpert など) を使用して、これらのフィールドを に変更し
varchar(150)
ます。 - 大丈夫です、
varchar(150)
今は全員です。
ではどうなるでしょうか?
- BLR にフィールド サイズも含まれている場合は、フィールドのサイズを変更しても問題ありません。トリガー コピーは 50 文字で、以前の長さがプリコンパイルされているためです。
- BLR がテーブルとフィールドへのリレート/リンク/トークンのみを使用する場合、コピー機能を気にせずにフィールドを変更できます。
質問は同じです: BLR には関連するフィールドのサイズが含まれていますか?