1

有一个 cffunction(在 cfc 文档中)对用户进行身份验证。它引用了一个存储过程并有一个“out”类型的cfprocparam。在 Adob​​e CFML 参考中,它说这意味着“该参数仅用于从数据库系统接收数据。将参数作为绑定变量传递。”

什么是绑定变量?

4

2 回答 2

3

术语“绑定变量”可能是 Adob​​e 的一个错误选择。我认为它们的意思是它绑定到存储过程中的变量,而不是“保存解释计划”意义上的绑定变量(对于 in 变量和 out 变量都应该如此)。选择“out”而不是“in”有一些很好的理由,还有一些副作用,你可能会觉得有用,或者如果你不期望它们可能会灼伤你。

首先,如果存储过程中的参数是“in”类型,那么大多数数据库不会让您在 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 不能更改,仅用于“where”子句或启动其他变量之类的地方,但 p_testout 可以更改。

其次,您可以通过在冷融合中使用 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 将为 100 而不是 10。只要您期望数据库存储的 proc 更改它,这将非常有用。

希望对这个问题有更多的了解。

于 2010-02-01T23:23:28.757 回答
0

来自维基百科:

(计算)与值相关联的变量,因此是具有分配存储位置的变量。如果编程语言实现了规范未知值、无穷大等的表示,则绑定到变量的值可能是其中之一。

注意粗体部分

未绑定到位置的变量称为自由变量。

于 2010-02-01T17:35:39.770 回答