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 編資料