13 January
2005

ZKInterbasdbDA-0.3.0

早速使わせてもらってます
[Zope] 

テストの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

Posted by shinobu at 19:50 | Comments (1) | Trackbacks (0)
<< qmail | Main | Mary Chapin Carpenter [10,000 miles] >>
Comments
Re: ZKInterbasdbDA-0.3.0

>それとZopeを再起動したときにDAのコネクションがcloseされてしまうようです。
メールに書き忘れました。
(再)起動直後にはコネクションが開かれてませんが、
ZSQLMethodの実行や、Browseのタイミングで接続されます。
動作上はこれで支障ないかと思います。

Posted by: nakagami at January 15,2005 02:09
Trackbacks
Please send trackback to:http://nakaj.net/Nikki/251/tbping
There is no trackback.