SAK 図書館
VB ADO + SQL 応用編 (その四) ADO ストアドファンクション - CreateParameter
基本的に Oracle、SQL-Sever、MDB で共通です。
■ストアドファンクション / ストアドプロシジャ
例えば、Oracle に次のようなストアドファンクションがあるとします。
(VB で言うユーザ関数のようなもの)
これを ADO で呼びたし、戻り値を得ることが可能です。
/*
========================================================================
テンポラリテーブル番号取得 Copyright (C) 1999-2000 Y.SAK
========================================================================
*/
create or replace function sak.GetTmp return varchar2 is
todt char(10);
dt char(10);
no number(9);
tmp varchar2(20);
cid integer;
begin
todt := to_char(sysdate, 'yyyy.mm.dd');
select 日付 into dt from sak.TMPm;
if todt > dt then
update sak.TMPm set 番号 = 0, 日付 = todt;
end if;
update sak.TMPm set 番号 = 番号 + 1;
select 番号 into no from sak.TMPm;
commit;
tmp := 'tmp' || ltrim(to_char(no, '000000'));
begin
cid := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(cid, 'drop table ' || tmp, dbms_sql.v7);
DBMS_SQL.CLOSE_CURSOR(cid);
exception
when OTHERS then
DBMS_SQL.CLOSE_CURSOR(cid);
end;
return tmp;
end;
/
■テンポラリテーブル取得ストアドファンクション呼び出し(一時テーブル、一時表)
▼フォームグローバル宣言で必要な数のテンポラリテーブル取得変数を宣言し
ます。ワークt と言うのがそれです。
Const TMP_SCM = "sak."
Const GetTmp = TMP_SCM & "GetTmp"
Dim ワークt As String
▼フォーム初期化ルーチンで、実際に使用可能なテンポラリテーブル名を取得
しています。複数個必要な場合は、s3cn_cmd.Execute からを複数書きます。
ストアドファンクションの実行は、Microsoft が Oracle 用に提供している
ドライバでないと動作しない。
Private Sub Form_Load()
Dim s3cn_cmd
Dim p0, p1
Dim rcd As String
'** テンポラリテーブル名取得
set s3cn_cmd = CreateObject ("ADODB.Command")
s3cn_cmd.ActiveConnection = s3cn_ado
s3cn_cmd.commandtext = GetTmp
s3cn_cmd.commandtype = 4
set p0 = s3cn_cmd.createParameter("rcd", 200, 4, 9)
'set p1 = s3cn_cmd.createParameter("p1", 200, 1, 20, "")
s3cn_cmd.Parameters.Append p0
's3cn_cmd.Parameters.Append p1
'p1.Value = "a001"
s3cn_cmd.execute
rcd = p0.value
ワークt = TMP_SCM & rcd
▼フォーム破棄ルーチンで、使用したテンポラリテーブルを削除します。
テスト時、残しておきたいなら、drop table の行を注釈にします。
Private Sub Form_Unload(Cancel As Integer)
'** テンポラリテーブル削除
if ワークt <> "" then
On Local Error Resume Next
s3cn_ado.Execute "drop table " & ワークt
On Local Error GoTo 0
end if
■補足
・Oracle の場合、Oracle のネイティブ ODBC ドライバでは、ストアドファン
クションが正常に呼び出せません。さんざん悩んだので要注意です。
Microsoft ODBC for Oracle ドライバでストアドファンクションは呼び出し
て下さい。
■CommandType
s3cn_cmd.CommandType = 1 'adCmdText SQL
s3cn_cmd.CommandType = 2 'adCmdTable テーブル
s3cn_cmd.CommandType = 512 'adCmdTableDirect テーブル
s3cn_cmd.CommandType = 4 'adCmdStoredProc ストアドプロシジャ
s3cn_cmd.CommandType = 8 'adCmdUnknown 不明(デフォルト)
s3cn_cmd.CommandType = 256 'adCmdFile 永続化 Recordset
s3cn_cmd.CommandType = ? 'adExecuteNoRecords 行を返さないコマンド
■VB ADO + SQL 応用編資料
■VB RDO + SQL 応用編資料
■VB oo4o + SQL 応用編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料
■VB テクニック編資料