0

В файле .CFC в CF-функции и с тегами CFargument.Ошибка ColdFusion 10 с хранимыми процедурами

<cfscript> 
     var sp=new storedproc(); 
     sp.setDatasource(variables.datasource); 
     sp.setProcedure("storedProcedure_INSERT"); 
     sp.addParam(cfsqltype="cf_sql_integer",type="in",value=arguments.one); 
     sp.addParam(cfsqltype="cf_sql_integer",type="in",value=arguments.two); 
     sp.addParam(cfsqltype="cf_sql_integer",type="in",value=arguments.three); 
     sp.addParam(cfsqltype="cf_sql_integer",type="in",value=arguments.four); 
     sp.addProcResult(name="results",resultset=1); 
     //writeDump(sp);break; //This dump is reached 
     var spObj=sp.execute(); //blows up here; this is never reached 
     writeDump(spObj);break; //This is never reached, either. 
     var spResults=spObj.getProcResultSets().results; 

блестящий пятак к любому, кто может сказать мне, почему sp.execute() взрывает с сообщением

"Cannot find results key in structure. 

The specified key, results, does not exist in the structure." 

я использовал этот псевдо-код много, может раз в прошлом , и никогда не делал этого. Я подключен к базе данных MSSQL Server 2012, все сверчка в CF Admin, и другие SP работают нормально. Трассировки стеки даже не включают какую-либо из моего кода на все ее произошла

ошибки в C: /ColdFusion10/cfusion/CustomTags/com/adobe/coldfusion/base.cfc: линия 491 вызываются из C : /ColdFusion10/cfusion/CustomTags/com/adobe/coldfusion/storedproc.cfc: линия 142 Вызывается из //hq-devfs/development$/websites/myProject/cfc/mySOAPWSDLs.cfc: строка 123

И SO взрывается, если я попытаюсь вставить больше. Google ... не был полезен.

+0

Выполняется ли хранимая процедура из SSMS? Если да, выполняется ли с помощью и связанных тегов? –

+0

Глупый вопрос, но с указанием имени процедуры - действительно ли он возвращает результат, т.е. объект запроса? – Leigh

+0

Это не НАСТОЯЩЕЕ имя этого; Я стараюсь не размещать здесь что-то слишком специфичное для своего работодателя. Он делает это, это принимает параметры, ищет существующую запись, обновляет ее, если она есть, или вставляет, если нет. В любом случае, он должен возвращать количество затронутых строк, нет? – Janet

ответ

6

Краткий ответ: Ошибка означает, что вы пытаетесь получить набор результатов из хранимой процедуры, когда она фактически не возвращает ее. Простым решением является добавление SELECT к концу вашей процедуры, поэтому оно возвращает набор результатов, содержащий нужные вам данные. Тогда исходный код будет работать:

SELECT @@ROWCOUNT AS NumOfRowsAffected; 

Более длинный ответ: метод вы используете, addProcResult(), является эквивалентом <cfprocresult>. Он предназначен для захвата resultset, возвращенного из хранимой процедуры. (Из-за плохого выбора наименований атрибутов CF многие люди считают, что «resultset» означает структуру «result» с сохраненнымпрограммным обеспечением, но это две совершенно разные вещи). А «Resultset» является объектом запроса», в CF жаргоне.

Хотя все четыре (4) первичные операторы SQL возвращают некоторые результат, не все из них возвращают„объект запроса“

  • только SELECT заявления порождают «объект запроса»
  • INSERT/UPDATE/DELETE заявления просто вернуть количество строк. Они не создают «объект запроса».

с вашей хранимой процедурой edure выполняет INSERT, он не генерирует «объект запроса». Таким образом, ошибка, когда вы пытаетесь захватить несуществующий запрос здесь:

sp.addProcResult(name="results",resultset=1); 

Самое простое решение, чтобы добавить SELECT заявление в конце хранимой процедуры, так что делает возвращает объект запроса. Тогда ваш код будет работать должным образом.


Как, впрочем, я подозреваю, что вы на самом деле пытались захватить структуру «результат», но использовали неправильный метод. Эквивалент <cfstoredproc result="..">: getPrefix().Хотя это все равно не сработает. Согласно the docs, он не содержит количество затронутых строк. Вероятно, потому что хранимые процедуры могут выполнять несколько операторов, каждый из которых потенциально возвращает количество строк, поэтому возвращается не только одно значение.

Смежные вопросы