Основываясь на деталях, чтобы выполнить то, что вы просите .....
Я предполагаю, что ваша хранимая процедура выглядит примерно так:
CREATE PROCEDURE dbo.usp_get_rates @origCode varchar(20), @toCode varchar(20)
AS
BEGIN
SET NOCOUNT ON ;
SELECT code, rate
FROM dbo.currency
WHERE code IN ( @origCode, @toCode )
END;
GO
ПРИМЕЧАНИЕ: вы хотели бы заменить "dbo" на вашу подходящую схему БД.Но если вы делаете запросы к базам данных (см. Комментарий выше о application.qry.currency
), то вы оставите свой FROM
вызов тем же и поместите / сослаться на вашу хранимую процедуру в соответствующей схеме.
С этой процедурой ваш код ColdFusion будет выглядеть следующим образом:
<cfstoredproc procedure="usp_get_rates" datasource="#variables.dsn#">
<cfprocparam cfsqltype="cf_sql_varchar" dbvarname="@origCode" type="in" value="#arguments.origCode#">
<cfprocparam cfsqltype="cf_sql_varchar" dbvarname="@toCode" type="in" value="#arguments.toCode#">
<cfprocresult name="rates">
</cfstoredproc>
<cfscript>
// Initialize your variables. They won't exist if your query has 0 rows.
var origRate = 0 ; // Or expected datatype
var toRate = 0 ; // Or expected datatype
for (var thisrow in rates) {
if ( thisrow.code == arguments.origCode ) { origRate = thisrow.rate ; }
if ( thisrow.code == arguments.toCode) { toRate = thisrow.rate ; }
}
</cfscript>
Поскольку вы используете arguments
scope, я предполагаю, что этот код находится внутри функции.Это позволит вам использовать ключевое слово var
.
Обратите внимание, что dbvarname
был проигнорирован после CFMX и восстановлен в обновлении 3. CF11. У CF11 был флаг JVM (-Dcoldfusion.ignoredbvarname
), чтобы продолжать игнорировать dbvarname
, но этот флаг игнорируется в CF2016 +.
Вы можете использовать простой цикл for
для итерации по запросу, но, как я уже сказал выше, это может быть не тем, что вам действительно нужно.Если ваш запрос / sproc возвращает несколько результатов, он перезапишет origRate
или toRate
, если для них будет возвращено более одного значения.т.е. если ваш запрос имеет [{code:"x",rate:41},{code:"x",rate:42}]
, он будет перезаписан rate
для code="x"
.