説明

ストアドプロシージャのパラメーターを定義します。このタグは、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 属性で構造体の名前を指定し、タグの属性名を構造体のキーとして使用します。

関連項目

履歴

ColdFusion 11 アップデート 3:以前無視されていたdbvarname 属性が復元されました。

ColdFusion MX

  • maxrows 属性が廃止されました。
  • dbvarname 属性の動作が変更されました。すべてのドライバで無視されるようになりました。ColdFusion では JDBC 2.2 が使用され、名前付きパラメータはサポートされません。これは非推奨になりました。
  • maxLength 属性の動作が変更されました。IN および 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

オプション

0

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

null

オプション

no

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

  • yes:value 属性を無視します。
  • no

scale

オプション 

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

type

オプション

in

  • inデータベースシステムにデータを送信するときにのみ使用します。値でパラメーターを渡します。
  • out:データベースシステムからデータを受信するときにのみ使用します。パラメーターをバインド変数として渡します。
  • inout:データを送信および受信するときに使用します。パラメーターをバインド変数として渡します。

value

type = "IN" の場合は必須

 

ColdFusion からストアドプロシージャに渡す値です。これは、inoutパラメーターではオプションです。

variable

type = "OUT" または "INOUT" の場合は必須

 

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

dbVarName オプション  

名前付きパラメーターがストアドプロシージャに送られる場合、この属性を使用してパラメーターの名前を指定できます。使用される場合、この属性ストアドプロシージャの各cfprocparamタグと共に表示されます。

ColdFusion 11 では、JVM フラグ(-Dcoldfusion.ignoredbvarname=true)を使用してこの属性を無効にできます。

ただし、ColdFusion(2016 リリース)では、この JVM フラグがサポートされていません

注意:データベースでは名前付きパラメーターに変数プレフィックスが必要です。

  1. Oracle の :
  2. SQLServer の @

 詳しくは、このブログ投稿を参照してください。

使用方法

このタグを使用すると、ストアドプロシージャのパラメータとそのデータ型を指定できます。パラメーターごとに 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"> ---> 

<!--- If submitting a new book, insert the record and display confirmation ---> 
<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. The ID is #bookId#.</h3> 
</cfoutput> 

</cfif> 
<cfform action="#CGI.SCRIPT_NAME#" method="post"> 
<h3>Insert a new book</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> 

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

リーガルノーティス   |   プライバシーポリシー