CFPROCPARAM  
説明

ストアードプロシージャのパラメータを定義します。このタグは、cfstoredproc タグ内にネストします。

 
カテゴリ

データベース操作タグ

 
シンタックス
<cfprocparam
   type = "in"、"out"、"inout"
   variable = "variable name"
   value = "parameter value"
   CFSQLType = "parameter datatype"
   maxLength = "length"
   scale = "decimal places" 
   null = "yes"、"no">
 
関連項目

cfinsert、cfprocresult、cfquery、cfqueryparam、cfstoredproc、cftransaction、cfupdate、『ColdFusion MX 開発ガイド』の第13章の「ColdFusion アプリケーションの設計と最適化」 の「ColdFusion アプリケーションの最適化」

 
ヒストリ

ColdFusion MX:

  • maxrows 属性は廃止されました。
  • dbvarname 属性の動作が変更されました。すべてのドライバで無視されるようになりました。ColdFusion MX では JDBC 2.2 が使用され、名前付きパラメータはサポートされません。
  • maxLength 属性の動作が変更されました。IN および INOUT パラメータ値に適用されるようになりました。

 
使用方法

ストアードプロシージャのパラメータとそれらのデータタイプを識別するときにこのタグを使用します。パラメータごとに 1 つの cfprocparam タグをコーディングしてください。パラメータ タイプと DBMS によって、コーディングするパラメータは異なります。ColdFusion MX では、位置パラメータのみがサポートされます。cfprocparam タグは、ストアードプロシージャ定義の関連パラメータと同じ順序でコーディングする必要があります。

出力変数は、variable 属性で指定された ColdFusion 変数に格納されます。

cfprocparam タグは、Oracle 8 および 9 の Reference Cursor には使用できません。代わりに、cfprocresult タグを使用します。

 

次の例では、Oracle 8 PL/SQL ストアードプロシージャを呼び出す方法を示します。ここでは、Reference Cursor タイプの Oracle 8 のサポートを利用しています。

次のパッケージ Foo_Data には、出力パラメータを Reference Cursor として宣言するプロシージャ refcurproc が含まれています。

  • パラメータ pParam1 は、EMP テーブルに行を返します。
  • パラメータ pParam2 は、DEPT テーブルに行を返します。

このプロシージャでは、1 つの入力パラメータを整数として、1 つの出力パラメータを 2 バイトの char varying タイプとして宣言します。cfstoredproc タグによってこのプロシージャを呼び出せるようにするには、RDBMS 環境でこのプロシージャを作成、コンパイル、およびバインドしておく必要があります。

CREATE OR REPLACE PACKAGE Foo_Data AS
    TYPE EmpTyp IS REF CURSOR RETURN Emp%ROWTYPE;
    TYPE DeptTyp IS REF CURSOR RETURN Dept%ROWTYPE;
 refcurproc(pParam1 in out EmpTyp, pParam2 in out DeptTyp,
pParam3 in integer, pParam4 out varchar2);
END foo_data;

CREATE OR REPLACE PACKAGE BODY Foo_Data AS
   PROCEDURE RefCurProc(pParam1 in out EmpTyp,
         pParam2 in out DeptTyp,
         pParam3 in integer,
         pParam4 out varchar2) IS
   BEGIN
      OPEN pParam1 FOR select * from emp;
      OPEN pParam2 FOR select * from dept;
      IF pParam3 = 1
      THEN
         pParam4:= 'hello';
      ELSE
         pParam4:= 'goodbye';
      END IF;
   END RefCurProc;
END Foo_Data;

次の CFML の例では、cfstoredproc、cfprocparam、および cfprocresult を使用して、RefCurProc プロシージャを呼び出す方法を示しています。

<cfstoredproc   procedure = "foo_data.refcurproc"
   dataSource = "oracle8i"
   username = "scott"
   password = "tiger"
   returnCode = "No">

   <cfprocparam type = "Out" CFSQLType = "CF_SQL_REFCURSOR"
      variable = "param1">
   <cfprocparam type = "Out" CFSQLType = "CF_SQL_REFCURSOR"
      variable = "param2">
   <cfprocparam type = "IN" CFSQLType = "CF_SQL_INTEGER" value = "1">

   <cfprocparam type = "OUT" CFSQLType = "CF_SQL_VARCHAR"
      variable = "FOO">
   <cfprocresult name = "rs1">
   <cfprocresult name = "rs2" resultSet = "2">
</cfstoredproc>

<b>最初の結果セット :</b><br>
<hr>
<cftable query = "rs1" colHeaders HTMLTable border = "1">
   <cfcol header = "EMPNO" text = "#EMPNO#">
   <cfcol header = "EMPLOYEE name" text = "#ENAME#">
   <cfcol header = "JOB" text = "#JOB#">
   <cfcol header = "SALARY" text = "#SAL#">
   <cfcol header = "DEPT NUMBER" text = "#DEPTNO#">
</cftable>

<hr>
<b>2 番めの結果セット:</b><br>

<cftable query = "rs2" colHeaders HTMLTable border = "1">
   <cfcol header = "DEPT name" text = "#DNAME#">
   <cfcol header = "DEPT NUMBER" text = "#DEPTNO#">
</cftable>
<hr>
<cfoutput>
   <b>出力パラメータ :</b>'#FOO#'
</cfoutput>
TYPE  
  オプション
 
Default value: "in"
  • in: データベースシステムにデータを送信するときにのみ使用します。値でパラメータを渡します。
  • out: データベースシステムからデータを受信するときにのみ使用します。パラメータをバインド変数として渡します。
  • inout: データを送信および受信するときに使用します。パラメータをバインド変数として渡します。
VARIABLE  
  type = "OUT" または "INOUT" の場合は必須
 

ColdFusion 変数名です。ストアードプロシージャが呼び出された後、出力パラメータに与えられる値を参照します。IN パラメータの場合は無視されます。

VALUE  
  type = "IN" の場合は必須
 

ColdFusion からストアードプロシージャに渡される値です。INOUT パラメータの場合はオプションです。

CFSQLTYPE  
  必須
 

任意のタイプのパラメータをバインドする SQL タイプです。ColdFusion では以下の値がサポートされます。名前の末尾の要素は SQL データタイプに対応しています。データベースシステムによっては、このリストの別のサブセットがサポートされる場合があります。サポートされているパラメータタイプについては、ご使用の DBMS のドキュメントを参照してください。

  • CF_SQL_BIGINT
  • CF_SQL_BIT
  • CF_SQL_BLOB
  • CF_SQL_CHAR
  • CF_SQL_CLOB
  • CF_SQL_DATE
  • CF_SQL_DECIMAL
  • CF_SQL_DOUBLE
  • CF_SQL_FLOAT
  • CF_SQL_IDSTAMP
  • CF_SQL_INTEGER
  • CF_SQL_LONGVARCHAR
  • CF_SQL_MONEY
  • CF_SQL_MONEY4
  • CF_SQL_NUMERIC
  • CF_SQL_REAL
  • CF_SQL_REFCURSOR
  • CF_SQL_SMALLINT
  • CF_SQL_TIME
  • CF_SQL_TIMESTAMP
  • CF_SQL_TINYINT
  • CF_SQL_VARCHAR

ColdFusion SQL データタイプから JDBC データタイプへのマッピングについては、cfqueryparamも参照してください。

MAXLENGTH  
  オプション
 
Default value: "0"

IN または INOUT の場合での、value 属性の文字列の最大長です。maxLength を 0 に指定すると、長さは任意になります。type=out を指定するときは、maxLength 属性は不要です。

SCALE  
  オプション
 
Default value: "0"

数値パラメータの小数点以下の桁数です。scale が 0 の場合、値は整数に制限されます。

NULL  
  オプション
 
Default value: "No"

パラメータを null 値として渡すかどうかを指定します。OUT タイプのパラメータでは使用しません。

  • Yes: value 属性を無視します。
  • No