Frage

Es gibt eine cffunction (in einem cfc Dokument), die einen Benutzer authentifiziert. Es verweist auf eine gespeicherte Prozedur und hat eine cfprocparam der vom Typ „out“ ist. Auf der Adobe CFML Referenz sagt es das bedeutet, dass „die Parameter nur Daten aus dem Datenbanksystem empfangen verwendet wird. Gibt den Parameter als gebundenen Variable.“

Was ist eine gebundene Variable?

War es hilfreich?

Lösung

Der Begriff „gebundener Variable“ kann eine schlechte Wahl der Worte von Adobe sein. Ich glaube, sie meinen es auf die Variable innerhalb der gespeicherten proc gebunden ist, nicht ein Bind-Variable in dem „Save the erklärt Plan“ Sinn (das sollte in Variablen und aus Variablen gilt sowohl für sein). Es gibt einige gute Gründe, die für „out“ über „in“ und es gibt auch Nebenwirkungen, die Sie nützlich finden können oder Sie verbrennen, wenn man sie nicht erwartet.

Zunächst einmal, wenn ein Parameter in einer gespeicherten Prozedur ist Typ „in“, dann die meisten Datenbanken werden Sie nicht in der proc lassen assign - sehr hilfreich, wenn Sie eine Variable wissen sollte nicht geändert werden. Hier ist ein Oracle-Beispiel ...

 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 kann nicht geändert werden, nur an Orten wie „where“ Klauseln verwendet oder andere Variablen zu initiieren aber p_testout geändert werden kann.

Zweitens können Sie nehmen diese einen Schritt weiter, indem die cfprocparam mit „Variable =“ Syntax in der kalten Fusion und tatsächlich bekommen den geänderten Wert in Coldfusion zurück, ohne durch eine cfprocresult zu gehen. Beachten Sie in diesem Beispiel die Anfangswerte für nTypeIn und nTypeOut beide beginnen bei 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#">

In Oracle am Ende dieses Tests wird nTypeIn 10 sein, aber nTypeOut wird 100 nicht 10 sein, so lange sehr nützlich sein kann, wie Sie die Datenbank gespeicherte Prozedur erwarten, es zu ändern.

Hope, die ein bisschen mehr Licht auf die Frage wirft.

Andere Tipps

Aus Wikipedia:

(computing) Eine Variable, die einem Wert zugeordnet ist, und damit eine Variable, die eine zugewiesene Speicherstelle hat. Wenn der Programmiersprache implementiert eine Darstellung eines kanonischen unbekannten Wert, Unendlichkeit, usw. der Wert ist, auf die Variable gebunden einer von diesen sein kann.

Beachten Sie die fett Teil

Variablen, die nicht an einen Ort gebunden sind, als freie Variablen bekannt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top