バインドされた変数とは何ですか?
-
24-09-2019 - |
質問
ユーザを認証する(CFCドキュメント内)のcffunctionがあります。これは、ストアド・プロシージャを参照し、タイプ「アウト」であるCFPROCPARAMを持っています。アドビCFMLリファレンスでは、それはそれをその手段言う「パラメータが唯一のデータベース・システムからデータを受信するために使用される。バインド変数としてパラメータを渡します。」
バインド変数とは何ですか?
解決
用語「バインドされた変数は、」アドビからの単語の悪い選択かもしれません。私は、彼らはそれがストアドプロシージャ内の変数ではなく、「計画を説明したセーブ」の意味でのバインド変数(つまり、変数の変数内外両方の真でなければなりません)にバインドされている意味だと思います。 「中」以上の「外」を選択するいくつかの良いの理由がありますし、あなたが有用見つけるかもしれまたはあなたがそれらを期待していない場合は、あなたを燃やすことが副作用もあります。
まず最初に、ストアドプロシージャ内のパラメータは、その後、ほとんどのデータベースは、あなたがprocの中でそれに割り当てることができません「の」タイプであれば - 非常に有用あなたは、変数を変更すべきではありません知っているとき。ここではOracleの例です...
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を変更することができない、唯一の「どこ」の句のような場所で使用したり、他の変数を開始するが、p_testoutを変更することができます。
第二に、あなたはCFPROCPARAM「変数=」常温核融合での構文を使用して、この一歩遠く取ると、実際に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は次のようになります100ない限り、あなたはそれを変更するには、データベースストアドプロシージャを期待しているように非常に役立ちます。10.
もう少し軽い質問に投げかけ希望ます。
他のヒント
ウィキペディアから:
(計算)の値に関連付けられている変数、従って割り当てられた記憶場所を有する変数のプログラミング言語実装する場合等正規未知の値、無限の表現、変数にバインドされた値は、これらのものであってもよいです。
お知らせの太字部分の
の場所にバインドされていない変数は自由変数として知られています。