現在オフラインです。再接続するためにインターネットの接続を待っています

ADO を使用して Oracle ストアド プロシージャからレコードセットを取得する方法

Microsoft Visual Basic .NET については、次の資料を参照してください。321718
Microsoft Visual Basic .NET については、次の資料を参照してください。308072
Microsoft Visual Basic .NET については、次の資料を参照してください。308073
概要
この資料では、Oracle ストアド プロシージャから標準的なレコードセットを返す Visual Basic 5.0 の ActiveX Data Objects (ADO) プロジェクトまたは Visual Basic 6.0 の ADO プロジェクトを作成する方法を示します。この資料は、「サポート技術情報」 (Microsoft Knowledge Base) の次の資料で説明されている概念に基づいています。
174679Oracle ストアド プロシージャからレコードセットを取得する方法
この資料の内容は、リモート データ オブジェクト (RDO) を使用して同様のことを行う方法について説明している「サポート技術情報」 (Microsoft Knowledge Base) の次の資料とほぼ同じです。
174981 Oracle ストアド プロシージャから標準的なレコードセットを取得する方法
: マイクロソフトでは、Microsoft ODBC Driver for Oracle の使用をお勧めします。
詳細
サポート技術情報の次の資料には、RDO を使用してストアド プロシージャからレコードセットを返す場合に利用できるすべての方法の詳細なサンプルが示されています。この資料は、それを簡略化したものです。
174679 Oracle ストアド プロシージャからレコードセットを取得する方法
: Oracle ストアド プロシージャを使用して Microsoft ODBC Driver for Oracle によって作成されるレコードセットは、Read Only であり、Static です。レコードセットを取得するには、Oracle Package を作成する必要があります。

この資料のサンプル プロジェクトを Visual Basic 5.0 または Visual Basic 6.0 で作成し、ADO を使用して、Microsoft ODBC Driver for Oracle によって作成されたレコードセットへのアクセスと操作を行うことができます。サポート技術情報の次の資料で説明されている、ストアド プロシージャからレコードセットを取得する機能を使用するには、Microsoft ODBC Driver for Oracle が必要です。
174679 Oracle ストアド プロシージャからレコードセットを取得する方法
Microsoft ODBC Driver for Oracle は、ストアド プロシージャからレコードセットを返すことができる、現在市場に出ている唯一のドライバです。Visual Basic と Oracle との組み合わせの関連情報については、サポート技術情報の次の資料を参照してください。次の資料のサンプルでは、RDO 2.0 が使用されています。
167225 [VB5] RDO:Oracle データベースにアクセスする方法
: この資料のサンプルを実行するには、MDAC 2.1 以降のスタックを入手してインストールする必要があります。Oracle コンポーネントと MDAC コンポーネントの入手方法は、サポート技術情報の次の資料で説明されています。
175018 Microsoft Oracle ODBC Driver を入手してインストールする方法
MDAC 1.5 には、ADO 1.5 と Microsoft ODBC Driver for Oracle 2.0 が含まれています。

ドライバのビルド 2.573 が含まれている MDAC 2.x のスタックは、次の Web アドレスからダウンロードできます。この資料は、2 つの部分に分かれています。前半でプロジェクトの作成手順を示し、後半でプロジェクトの重要な部分について詳しく説明します。

サンプル プロジェクトの作成と実行

  1. Oracle サーバーで次の DDL スクリプトを実行します。
    DROP TABLE person;CREATE TABLE person (ssn     NUMBER(9) PRIMARY KEY,  fname   VARCHAR2(15),  lname   VARCHAR2(20));INSERT INTO person VALUES(555662222,'Sam','Goodwin');INSERT INTO person VALUES(555882222,'Kent','Clark');INSERT INTO person VALUES(666223333,'Jane','Doe');COMMIT; / 					
  2. Oracle サーバー上で次のパッケージを作成します。
    CREATE OR REPLACE PACKAGE packperson  AS    TYPE tssn is TABLE of  NUMBER(10)    INDEX BY BINARY_INTEGER;    TYPE tfname is TABLE of VARCHAR2(15)    INDEX BY BINARY_INTEGER;    TYPE tlname is TABLE of VARCHAR2(20)    INDEX BY BINARY_INTEGER;    PROCEDURE allperson            (ssn    OUT     tssn,             fname  OUT     tfname,             lname  OUT     tlname);    PROCEDURE oneperson        (onessn IN      NUMBER,         ssn    OUT     tssn,             fname  OUT     tfname,             lname  OUT     tlname);END packperson;/ 					
  3. Oracle サーバー上で次のパッケージ本体を作成します。
    CREATE OR REPLACE PACKAGE BODY packpersonASPROCEDURE allperson            (ssn    OUT     tssn,             fname  OUT     tfname,             lname  OUT     tlname)IS    CURSOR person_cur IS            SELECT ssn, fname, lname            FROM person;    percount NUMBER DEFAULT 1;BEGIN    FOR singleperson IN person_cur    LOOP            ssn(percount) := singleperson.ssn;            fname(percount) := singleperson.fname;            lname(percount) := singleperson.lname;            percount := percount + 1;    END LOOP;END;PROCEDURE oneperson      (onessn  IN    NUMBER,             ssn     OUT   tssn,             fname   OUT   tfname,             lname   OUT   tlname)IS CURSOR person_cur IS           SELECT ssn, fname, lname           FROM person           WHERE ssn = onessn;    percount NUMBER DEFAULT 1;BEGIN    FOR singleperson IN person_cur    LOOP            ssn(percount) := singleperson.ssn;            fname(percount) := singleperson.fname;            lname(percount) := singleperson.lname;            percount := percount + 1;    END LOOP;END;END;/ 					
  4. Visual Basic 5.0 Enterprise Edition または Visual Basic 6.0 Enterprise Edition で新しいプロジェクトを開きます。デフォルトで、Form1 が作成されます。
  5. フォーム上に次のコントロールを配置します。
    コントロール     オブジェクト名        Caption フィールド-------------------------------------------------ボタン           cmdGetEveryone    Get Everyoneボタン           cmdGetOne         Get One					
  6. [ツール] メニューの [オプション] をクリックします。[モジュール全体を連続表示] チェック ボックスをオンにし、[OK] をクリックします。この設定により、プロジェクトのコード全体を参照できるようになります。
  7. 次のコードをコード ウィンドウに貼り付けます。
    Option ExplicitDim Cn As ADODB.ConnectionDim CPw1 As ADODB.CommandDim CPw2 As ADODB.CommandDim Rs As ADODB.RecordsetDim Conn As StringDim QSQL As StringDim inputssn As LongPrivate Sub cmdGetEveryone_Click()  Set Rs.Source = CPw1  Rs.Open  While Not Rs.EOF      MsgBox "Person data: " & Rs(0) & ", " & Rs(1) & ", " & Rs(2)      Rs.MoveNext  Wend  Rs.CloseEnd SubPrivate Sub cmdGetOne_Click()  Set Rs.Source = CPw2  inputssn = InputBox("Enter the SSN you wish to retrieve:")  CPw2(0) = inputssn  Rs.Open  MsgBox "Person data: " & Rs(0) & ", " & Rs(1) & ", " & Rs(2)  Rs.CloseEnd SubPrivate Sub Form_Load()  'Replace <User ID>, <Password>, and <Server> with the  'appropriate parameters.  Conn = "UID=*****;PWD=*****;driver=" _         & "{Microsoft ODBC for Oracle};SERVER=dseOracle;"  Set Cn = New ADODB.Connection  With Cn      .ConnectionString = Conn      .CursorLocation = adUseClient      .Open  End With  QSQL = "{call packperson.allperson({resultset 9, ssn, fname, " _         & "lname})}"  Set CPw1 = New ADODB.Command  With CPw1      Set .ActiveConnection = Cn      .CommandText = QSQL      .CommandType = adCmdText  End With  QSQL = "{call packperson.oneperson(?,{resultset 2, ssn, fname, " _         & "lname})}"  Set CPw2 = New ADODB.Command  With CPw2      Set .ActiveConnection = Cn      .CommandText = QSQL      .CommandType = adCmdText      .Parameters.Append .CreateParameter(, adInteger, adParamInput)  End With  Set Rs = New ADODB.Recordset  With Rs      .CursorType = adOpenStatic      .LockType = adLockReadOnly  End WithEnd SubPrivate Sub Form_Unload(Cancel As Integer)  Cn.Close  Set Cn = Nothing  Set CPw1 = Nothing  Set CPw2 = Nothing  Set Rs = NothingEnd Sub
  8. [プロジェクト] メニューの [参照設定] をクリックします。[Microsoft Active Data Objects 2.x Library] チェック ボックスをオンにします。
  9. プロジェクトを実行します。[Get Everyone] をクリックすると、次のクエリが実行されます。
    QSQL = "{call packperson.allperson({resultset 9, ssn, fname, "_               & "lname})}"					
このクエリは、パッケージ "packperson" にあるストアド プロシージャ "allperson" ("packperson.allperson" で参照) を実行します。このストアド プロシージャには入力パラメータがなく、それぞれ 9 個以下のレコードを含む 3 つの配列 (ssn、fname、lname) を返します。サポート技術情報の次の資料で説明されているとおり、ストアド プロシージャから返す行の最大数を指定する必要があります。
174679 Oracle ストアド プロシージャからレコードセットを取得する方法
詳細については、Microsoft ODBC Driver for Oracle に付属のヘルプ ファイル、およびサポート技術情報の資料 174679 を参照してください。

[Get One] をクリックすると、SSN の入力ボックスが表示されます。有効な SSN を入力して [OK] をクリックすると、次のクエリが実行されます。
QSQL = "{call packperson.oneperson(?,{resultset 2, ssn, fname, "_           & "lname})}"				
ストアド プロシージャ packperson.oneperson では入力パラメータが 1 つだけ使用されます。このパラメータで、作成するレコード セットの選択基準を指定します。packperson.allperson と同様、レコードセットは、packperson で定義されているテーブル タイプを使用して作成されます。詳細については、サポート技術情報の資料 174679 を参照してください。

: レコードセットを返す Oracle ストアド プロシージャでは、入力パラメータのみを定義できます。出力パラメータは定義できません。

この 2 つのストアド プロシージャは、レコードセットを返すストアド プロシージャの基本的な用途に対応しています。それは、定義済みのレコードセット (すべての人のレコード) を取得すること、および 1 つ以上の入力パラメータに基づくレコードセット (または特定の 1 つのレコード) を取得することです。これらのレコードセットを取得した後、ストアド プロシージャ、またはクライアント上で作成した SQL を使用して、挿入、更新、削除を行うことができます。
関連情報
Microsoft ODBC Driver for Oracle に付属のヘルプ ファイル

『Oracle PL/SQL プログラミング基礎編』、『Oracle PL/SQL プログラミング応用編』 (Steven Feuerstein 著)

『Visual Basic による SQL Server データアクセスガイド』 (William Vaughn 著)

関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
174679 Oracle ストアド プロシージャからレコードセットを取得する方法
175018 Microsoft Oracle ODBC Driver を入手してインストールする方法
174981 Oracle ストアド プロシージャから標準的なレコードセットを取得する方法
167225 [VB5] RDO:Oracle データベースにアクセスする方法
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 176086 (最終更新日 2004-07-15) を基に作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。
oracle stored procedures ado msorcl32.dll package
プロパティ

文書番号:176086 - 最終更新日: 12/22/2004 07:21:00 - リビジョン: 8.2

  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Open Database Connectivity 2.0
  • Microsoft Open Database Connectivity 2.0
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.0
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Data Access Components 2.0
  • Microsoft Data Access Components 2.1 Service Pack 2
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.7
  • kbhowto kboracle kbdatabase kbdriver KB176086
フィードバック