SAK 図書館
VB RDO + SQL 応用編 (その四) RDO ストアドファンクション - CreateQuery
基本的に Oracle、SQL-Sever、MDB で共通です。
■ストアドファンクション / ストアドプロシジャ
例えば、Oracle に次のようなストアドファンクションがあるとします。
(VB で言うユーザ関数のようなもの)
これを RDO で呼びたし、戻り値を得ることが可能です。
/*
========================================================================
テンポラリテーブル番号取得 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 = "{ ? = call " & TMP_SCM & "GetTmp }"
Dim ワークt As String
▼フォーム初期化ルーチンで、実際に使用可能なテンポラリテーブル名を取得
しています。複数個必要な場合は、qu.Execute からを複数書きます。
ストアドファンクションの実行は、RDBcn2 でないとエラーになります。
(Microsoft が Oracle 用に提供しているドライバでないと動作しない。)
Private Sub Form_Load()
'** テンポラリテーブル名取得
Set qu = RDBcn2.CreateQuery("qu", GetTmp)
qu(0).Direction = rdParamReturnValue
qu.Execute
ワークt = TMP_SCM & qu(0)
▼フォーム破棄ルーチンで、使用したテンポラリテーブルを削除します。
テスト時、残しておきたいなら、drop table の行を注釈にします。
Private Sub Form_Unload(Cancel As Integer)
'** テンポラリテーブル削除
if ワークt <> "" then
On Local Error Resume Next
RDBcn.Execute "drop table " & ワークt, rdExecDirect
On Local Error GoTo 0
end if
■補足
・Oracle の場合、Oracle のネイティブ ODBC ドライバでは、ストアドファン
クションが正常に呼び出せません。さんざん悩んだので要注意です。
Microsoft ODBC for Oracle ドライバでストアドファンクションは呼び出し
て下さい。
■VB RDO + SQL 応用編資料
■VB ADO + SQL 応用編資料
■VB oo4o + SQL 応用編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料
■VB テクニック編資料