有一个cffunction(在cfc文档中)验证用户。它引用了一个存储过程,并且有一个cfprocparam,类型为“out”。在Adobe CFML引用中,它表示“该参数仅用于从数据库系统接收数据。将参数作为绑定变量传递。”
什么是绑定变量?
答案 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)
来自维基百科:
(计算)与值关联的变量,因此是具有已分配存储位置的变量。如果编程语言实现规范未知值,无穷大等的表示。 ,绑定到变量的值可以是其中之一。
请注意粗体部分
未绑定到某个位置的变量称为自由变量。