SAK 図書館
PostgreSQL 編20 - VB ストアド呼び出し、トリガー、トランザクションロールバック
■VB ストアドファンクション呼び出し ・VB6 ADO - ODBC での PostgreSQL のストアドの呼び出しをテストする。 testm には、トリガーも作成してあるので、同時にトリガーのテストもする。 drop function instest1(); create function instest1() returns int as ' declare rcd int := -1; begin insert into test2m values (''ins001'', ''aaa''); insert into test2m values (''ins002'', ''bbb''); insert into test2m values (''ins003'', ''ccc''); rcd := 0; return rcd; end; ' language 'plpgsql' ; ・VB6 ADO では、次のようにストアドを呼び出す。 Dim cn as Variant Dim cd as Variant Dim p0 as Variant '** ODBC 接続 set cn = CreateObject ("ADODB.Connection") cn.Open "dsn=PostgreSQL;uid=sak;pwd=sak" cn.CursorLocation = 3 '** ストアドコマンド set cd = CreateObject ("ADODB.Command") cd.ActiveConnection = cn cd.commandtext = "instest1()" cd.commandtype = 4 set p0 = cd.createParameter("rcd", 200, 4, 9) cd.Parameters.Append p0 '** トランザクション開始 cn.BeginTrans '** レコード処理 cn.Execute "insert into testm values ('x001', 1, 2, 3)" '** ストアド呼び出し cd.execute msgbox p0.value '** トランザクション終了 'cn.rollbackTrans cn.CommitTrans '** ODBC 接続解除 cn.Close ・実行後の結果は、次のとおりである。 select * from testm; key | data1 | data2 | data3 ----------+-------+-------+------- x001 | 1 | 2 | 3 select * from test2m; key | code1 ----------+---------- x001 | triins ins001 | aaa ins002 | bbb ins003 | ccc ■PL/pgSQL、ストアド、トリガ、トランザクションロールバック ・PL/SQL とは違い PL/pgSQL 内ではトランザクションコマンドは使えない。 しかし、ADO - ODBC や JDBC でのトランザクション配下から、呼ばれた ストアドやトリガーは、ちゃんとロールバック可能である。 実用システムとしては、まったく問題ないと考える。 ・実際の検証は、上記 VB コードの「トランザクション終了」部分を次のよう に修正して行った。 '** トランザクション終了 cn.rollbackTrans 'cn.CommitTrans ■その他 SQL ・「\h 命令」を発見したので、とりあえずは困りそうにない。 尚、タイトルは、MySQL ですが、『PHP + MySQL 編』の資料中にも PostgreSQL の資料があります。 ■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料