SAK 図書館

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

ASP VB Script ADO + SQL 応用編 (その四) ADO ストアドファンクション

基本的に 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;
/

■テンポラリテーブル取得ストアドファンクション呼び出し(一時テーブル、一時表)

  ▼テンポラリテーブル取得変数を宣言します。workt と言うのがそれです。

  Const TMP_SCM = "sak."
  Const GetTmp = "GetTmp"
  Dim workt

  ▼実際に使用可能なテンポラリテーブル名を取得します。
    複数個必要な場合は、s3cn_cmd.Execute からを複数書きます。
    ストアドファンクションの実行は、Microsoft が Oracle 用に提供している
    ドライバでないと動作しない。

  Dim rcd

'** テンポラリテーブル名取得
  if isempty(session("s3cn_cmd")) then
    set session("s3cn_cmd") = server.CreateObject ("ADODB.Command")
    session("s3cn_cmd").ActiveConnection = session("s3cn_ado")
    session("s3cn_cmd").commandtext = TMP_SCM & GetTmp
    session("s3cn_cmd").commandtype = 4
    set session("p0") = session("s3cn_cmd").createParameter("rcd", 200, 4, 9)
    'set session("p1") = session("s3cn_cmd").createParameter("p1", 200, 1, 20, "")
    session("s3cn_cmd").Parameters.Append session("p0")
    'session("s3cn_cmd").Parameters.Append session("p1")
  end if
  'session("p1").Value = "a001"
  session("s3cn_cmd").execute
  rcd = session("p0").value
  workt = TMP_SCM & rcd

■補足

  ・ASP の場合、session 変数で ADODB.Command ほ保持するのが鍵です。

  ・Oracle の場合、Oracle のネイティブ ODBC ドライバでは、ストアドファン
    クションが正常に呼び出せません。さんざん悩んだので要注意です。
    Microsoft ODBC for Oracle ドライバでストアドファンクションは呼び出し
    て下さい。

■CommandType

  session("s3cn_cmd").CommandType = 1   'adCmdText          SQL
  session("s3cn_cmd").CommandType = 2   'adCmdTable         テーブル
  session("s3cn_cmd").CommandType = 512 'adCmdTableDirect   テーブル
  session("s3cn_cmd").CommandType = 4   'adCmdStoredProc    ストアドプロシジャ
  session("s3cn_cmd").CommandType = 8   'adCmdUnknown       不明(デフォルト)
  session("s3cn_cmd").CommandType = 256 'adCmdFile          永続化 Recordset
  session("s3cn_cmd").CommandType = ?   'adExecuteNoRecords 行を返さないコマンド

■ASP VB Script ADO + SQL 応用編資料
■ASP VB Script oo4o + SQL 応用編資料
■ASP VB Script 基礎実地編資料
■ASP VB Script 基礎編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

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



Copyright (C) 1999-2024 Y.SAK