SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

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 テクニック編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK