什么是绑定变量?

时间:2010-02-01 17:29:32

标签: variables coldfusion cfstoredproc

有一个cffunction(在cfc文档中)验证用户。它引用了一个存储过程,并且有一个cfprocparam,类型为“out”。在Adobe CFML引用中,它表示“该参数仅用于从数据库系统接收数据。将参数作为绑定变量传递。”

什么是绑定变量?

2 个答案:

答案 0 :(得分:3)

术语“绑定变量”可能是来自Adobe的单词的错误选择。我认为它们意味着它与存储过程中的变量绑定,而不是“保存解释计划”意义上的绑定变量(在变量和输出变量中都应该是这样)。选择“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.只要您期望数据库存储过程更改它,这可能非常有用。

希望能够更清楚地了解这个问题。

答案 1 :(得分:0)

来自维基百科:

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

请注意粗体部分

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