このタグは、CFFiddle ではサポートされていません。
説明
ストアドプロシージャのパラメーターを定義します。このタグは、cfstoredproc タグ内にネストします。
カテゴリ
シンタックス
<cfprocparam CFSQLType = "parameter data type" maxLength = "length" null = "yes|no" scale = "decimal places" type = "in|out|inout" value = "parameter value" variable = "variable name" dbvarname = "proc parameter name">
このタグの属性は attributeCollection 属性で指定でき、その値は構造体になります。attributeCollection 属性で構造体の名前を指定し、タグの属性名を構造体のキーとして使用します。
関連項目
cfinsert、cfprocresult、cfquery、cfqueryparam、cfstoredproc、cftransaction、cfupdate、『ColdFusion アプリケーションの開発』の ColdFusion アプリケーションの設計と最適化の ColdFusion アプリケーションの最適化
履歴
ColdFusion 11 アップデート 3:以前無視されていた dbvarname 属性が復元されました。
ColdFusion MX
- : maxrows 属性が廃止されました。
- dbvarname 属性 の動作が変更されました。すべてのドライバで無視されるようになりました。ColdFusion では JDBC 2.2 が使用され、名前付きパラメーターはサポートされません。これは非推奨になりました。
- maxLength 属性の動作が変更されました。IN および INOUT パラメーター値に適用されるようになりました。
属性
属性 |
必須/オプション |
デフォルト |
説明 |
---|---|---|---|
CFSQLType |
必須 |
|
任意の型のパラメーターをバインドする SQL 型です。ColdFusion では次の値がサポートされます。名前の末尾の要素は SQL データ型に対応しています。データベースシステムによっては、このリストの別のサブセットがサポートされる場合があります。サポートされているパラメータ型については、ご使用の DBMS のドキュメントを参照してください。
|
maxLength |
オプション |
0 |
IN または INOUT の場合での、value 属性の文字列の最大長です。maxLength を 0 に設定すると、長さは任意になります。type=out を指定するときは、maxLength 属性は不要です。 |
null |
オプション |
no |
パラメーターを null 値として渡すかどうかを指定します。OUT タイプのパラメータでは使用しません。
|
scale |
オプション |
0 |
数値パラメーターの小数点以下の桁数です。scale が 0 の場合、値は整数に制限されます。 |
type |
オプション |
in |
|
value |
type = "IN" の場合は必須 |
|
ColdFusion からストアドプロシージャに渡す値です。inout パラメーターの場合はオプションです。 |
variable |
type = "OUT" または "INOUT" の場合は必須 |
|
ColdFusion 変数名です。ストアドプロシージャが呼び出された後、出力パラメーターに与えられる値を参照します。in パラメーターの場合は無視されます。 |
dbVarName | オプション | 名前付きパラメーターがストアドプロシージャに送られる場合、この属性を使用してパラメーターの名前を指定できます。使用される場合、この属性は、ストアードプロシージャの各 cfのパラメータータグとともに表示されます。 ColdFusion 11 では、JVM フラグ(-Dcoldfusion.ignoredbvarname=true)を使用してこの属性を無効にできます。 ただし、ColdFusion(2016 リリース)では、この JVM フラグがサポートされていません。 注意:データベースでは名前付きパラメーターに変数プレフィックスが必要です。
|
使用方法
このタグを使用すると、ストアドプロシージャのパラメータとそのデータ型を指定できます。パラメーターごとに 1 つの cfprocparam タグをコーディングします。コーディングするパラメーターは、パラメーターの種類と DBMS によって異なります。ColdFusion では、定位置パラメーターがサポートされます。定位置パラメーターを使用する場合は、cfprocparam タグをストアドプロシージャ定義内の関連するパラメーターと同じ順番でコーディングする必要があります。出力変数は、variable 属性で指定された ColdFusion 変数内に格納されます。
cfprocparam タグは、Oracle 8 および 9 の Reference Cursor には使用できません。代わりに、cfprocresult タグを使用します。
例
次の例では、データベースにデータを挿入する Oracle および Microsoft SQL Server のストアドプロシージャを示します。これらのストアドプロシージャは同等です。いずれのストアドプロシージャを呼び出す場合も CFML は同じです。
次の例では、Oracle のストアドプロシージャを示します。
CREATE OR REPLACE PROCEDURE Insert_Book ( arg_Title Books.Title%type, arg_Price Books.Price%type, arg_PublishDate Books.PublishDate%type, arg_BookID OUT Books.BookID%type) AS num_BookID NUMBER; BEGIN SELECT seq_Books.NEXTVAL INTO num_BookID FROM DUAL; INSERT INTO Books ( BookID, Title, Price, PublishDate ) VALUES ( num_BookID, arg_Title, arg_Price, arg_PublishDate ); arg_BookID := num_BookID; END; /
次の例では、SQL Server のストアドプロシージャを示します。
CREATE PROCEDURE Insert_Book ( @arg_Title VARCHAR(255), @arg_Price SMALLMONEY, @arg_PublishDate DATETIME, @arg_BookID INT OUT) AS BEGIN INSERT INTO Books ( Title, Price, PublishDate ) VALUES ( @arg_Title, @arg_Price, @arg_PublishDate ); SELECT @arg_BookID = @@IDENTITY; END;
いずれのストアドプロシージャを呼び出す場合も、次の CFML コードを使用します。
<cfset ds = "sqltst"> <! --- <cfset ds = "oratst"> ---> <! --- 新しい本を送信する場合は、レコードを挿入して確認を表示する---> <cfif isDefined("form.title")> <cfstoredproc procedure="Insert_Book" datasource="#ds#"> <cfprocparam cfsqltype="cf_sql_varchar" value="#form.title#"> <cfprocparam cfsqltype="cf_sql_numeric" value="#form.price#"> <cfprocparam cfsqltype="cf_sql_date" value="#form.price#"> <cfprocparam cfsqltype="cf_sql_numeric" type="out" variable="bookId"> </cfstoredproc> <cfoutput> <h3>'#form.title#' inserted into database.ID は #bookId # です。 </h3> </cfoutput> </cfif> <cfform action="#CGI.SCRIPT_NAME#" method="post"> <h3>新規ブックを挿入</h3> Title: <cfinput type="text" size="20" required="yes" name="title"/> <br/> Price: <cfinput type="text" size="20" required="yes" name="price" validate="float"/> <br/> Publish Date: <cfinput type="text" size="5" required="yes" name="publishDate" validate="date"/> <br/> <input type="submit" value="Insert Book"/> </cfform>
別の例:
<cfstoredproc procedure = "foo_proc" dataSource = "MY_SYBASE_TEST" username = "sa" password = "" dbServer = "scup" dbName = "pubs2" returnCode = "Yes" debug = "Yes"> <cfprocresult name = RS1> <cfprocresult name = RS3 resultSet = 3> <cfprocparam type = "IN" CFSQLType = CF_SQL_INTEGER value = "1" dbVarName = @param1> <cfprocparam type = "OUT" CFSQLType = CF_SQL_DATE variable = FOO dbVarName = @param2> </cfstoredproc>