SAK 図書館
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 編資料