ZKInterbasdbDA-0.3.0
テストのDBをまず作りました。
まず以下のようなテーブルを作る
CREATE TABLE "TB1"
( "PID" INTEGER, "F1" INTEGER, "F2" INTEGER);
プロシジャーを作ります。
二つの値を受け取りTB1テーブルにインサートし、最新のインサートされた値を返す、あまり意味はないプロシジャーですが。
Windowsのコマンドラインからの isqlでも以下のようにset termすればprocedureを作成できると思います。>中神さま
SET TERM ^ ;
/* PROCEDURE内で ; を利用するためSET TERMで ^ に変更します */
CREATE PROCEDURE "P_INS_TB1"
( "V1" INTEGER, "V2" INTEGER)
RETURNS
( "R1" INTEGER, "R2" INTEGER)
AS
begin
insert into tb1(f1,f2) values(:v1, :v2);
select f1, f2 from tb1 where pid = (select max(pid) from tb1)
into :r1, :r2;
suspend;
end
^
SET TERM ; ^
COMMIT WORK;
ユニークキーを作るためのジェネレータをつくります。
CREATE GENERATOR "GEN_PID";
上記generatorを利用するためのトリガーを作ります。
CREATE TRIGGER "TRG_PID" FOR "TB1"
ACTIVE BEFORE INSERT POSITION 0
as
begin
new.pid = gen_id(gen_pid,1) ;
end
^
COMMIT WORK ^
SET TERM ;^
そして値をいれてみて動作を確認しました。
IB,Firebirdではselect文でprocedureを利用できるというユニークですがわかりやすい機能があります。
SQL> select * from p_ins_tb1(1,2);
R1 R2
============ ============
1 2
SQL> select * from p_ins_tb1(3,4);
R1 R2
============ ============
3 4
SQL> select * from tb1;
PID F1 F2
============ ============ ============
1 1 2
2 3 4
というような感じになります。プロシジャー文内でコミットしていないのでデータの信憑性はないわけですがテストケースとして作ったのでご容赦。
さてこうして作ったデータベースをbrowseタグでみてみますとgenerator, procedureは無事表示できました。
非常に便利です。
ただtriggerだけが表示されませんでした。
ところがexamplesのなかのemployee.fdbに関してはtableのツリー以下で表示できています。
(FireBirdインストール時につくられるサンプルDB)
キャプチャしました
それとZopeを再起動したときにDAのコネクションがcloseされてしまうようです。
ただこれはもしかすると私の勘違いかもしれません。そうたびたび再起動するわけにいかない場所で作ってしまったため、ぜひどなたかテストしていただけないでしょうか?
super serverの場合サーバのリスタートは
/etc/init.d/xinted restart
わからなくっててんてこ舞いでした。
トリガー、引き金に見えますかね、、、、。
trigger_inactive.gif
trigger.gif