1

ユーザーを認証する cffunction (cfc ドキュメント内) があります。これはストアド プロシージャを参照し、型が「out」の cfprocparam を持っています。Adobe CFML リファレンスでは、「パラメーターはデータベース システムからのみデータを受信するために使用されます。パラメーターはバインドされた変数として渡されます」という意味です。

バインド変数とは

4

2 に答える 2

3

「バインドされた変数」という用語は、アドビの不適切な言葉かもしれません。「説明計画を保存する」という意味でのバインド変数ではなく、ストアド プロシージャ内の変数にバインドされていることを意味していると思います (これは、in 変数と out 変数の両方に当てはまるはずです)。「イン」ではなく「アウト」を選択する正当な理由がいくつかあります。また、予期しない場合に有用であったり、やけどを負ったりする可能性のある副作用もあります。

まず、ストアド プロシージャのパラメータが「in」タイプの場合、ほとんどのデータベースでは、プロシージャ内でそのパラメータを割り当てることができません。変数を変更してはならないことがわかっている場合は非常に役立ちます。これがオラクルの例です...

 CREATE PROCEDURE bind_test(p_testin IN NUMBER, p_testout OUT NUMBER) IS
 BEGIN

 -- p_testin  := 100; -- error can not be used as an assignment target
 p_testout := 100;

 END bind_test;

p_testin は変更できません。「where」句のような場所で、または他の変数を開始するためにのみ使用されますが、p_testout は変更できます。

第 2 に、コールド フュージョンで cfprocparam "variable=" 構文を使用することで、さらに一歩進んで、cfprocresult を経由せずに ColdFusion で変更された値を実際に取得できます。この例では、nTypeIn と nTypeOut の両方の初期値が 10 から始まることに注意してください...

 <cfset nTypeIn  = 10 >
 <cfset nTypeOut = 10 >

 <cfstoredproc  procedure = "bind_test" dataSource = "#ProdDB#" returnCode = "No">
    <cfprocparam type="in"  cfsqltype="CF_SQL_INTEGER" variable="nTypeIn"  value="#nTypeIn#"  null="No"> 
    <cfprocparam type="out" cfsqltype="CF_SQL_INTEGER" variable="nTypeOut" value="#nTypeOut#" null="No"> 
 </cfstoredproc>

 <cfdump var="#nTypeIn#">
 <cfdump var="#nTypeOut#">

Oracle では、このテストの最後に nTypeIn は 10 になりますが、nTypeOut は 10 ではなく 100 になります。これは、データベースのストアド プロシージャによって変更されることが予想される限り、非常に役立ちます。

質問にもう少し光を当てることを願っています。

于 2010-02-01T23:23:28.757 に答える
0

ウィキペディアから:

(コンピューティング)値に関連付けられている変数、したがって割り当てられた格納場所を持つ変数。プログラミング言語が正規の未知の値、無限大などの表現を実装している場合、変数にバインドされた値はこれらのいずれかになります。

太字部分に注目

場所にバインドされていない変数は、自由変数と呼ばれます。

于 2010-02-01T17:35:39.770 に答える