2017-02-10 8 views
-1

Я пытаюсь преобразовать запрос cftag в запрос cfscript.ColdFusion Query Encounted UPDATE

Вот версия cftag:

<cfquery name="local.qUpdateCRDRMemo" datasource="#Application.dsn.orionTesting#"> 
UPDATE is_data.crdr_memo 
       SET 
        ps_speed_type = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#local.valid.operatingUnit#";, 
        ps_account_no = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#local.valid.account#";, 
        ps_class = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#local.valid.class#";, 
        requested_by = <cfqueryparam cfsqltype="CF_SQL_NUMERIC" value="#local.requestorId#" null="#utils.isNull(local.requestorId)#";, 
        updated_by = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#utils.getUserInfo()#"; 
       WHERE crdr_memo_id = <cfqueryparam cfsqltype="CF_SQL_NUMERIC" value="#local.adjustment#" null="#utils.isNull(local.adjustment)#"; 
      </cfquery> 

И это cfscript

<cfscript> 
local.qUpdateCRDRMemo = queryExecute(
       "UPDATE is_data.crdr_memo 
       SET 
        ps_speed_type = [local].valid.operatingUnit, 
        ps_account_no = [local].valid.account, 
        ps_class = [local].valid.class, 
        requested_by = [local].requestorId, 
        updated_by = utils.getUserInfo() 
       WHERE crdr_memo_id = [local].adjustment", 
       {}, 
       {dbtype="query"} 
       ); 
</cfscript> 

Я получаю сообщение об ошибке: java.sql.SQLException:
запросов запросов об ошибке синтаксиса.
Обнаружен «UPDATE.

В моем понимании он видит UPDATE и думает, что он пытается быть как ColdFusion и SQL, но почему это так. Я чувствую, что я что-то супер просто отсутствует, но просто не могу видеть его .

+3

вы передаете 'DBTYPE =«запрос»' –

+0

@ BernhardDöbler Спасибо, я понял, почему это вызывает ошибку, но что она должна быть? –

+2

Это должен быть источник данных '{datasource = Application.dsn.orionTesting} –

ответ

2

Для запросов к базе данных с тегами:

<cfquery name="local.qUpdateCRDRMemo" datasource="#Application.dsn.orionTesting#"> 
    SQL HERE 
</cfquery> 

Для запросов к базе данных с помощью сценария:

var myQuery = new Query(datasource="#Application.dsn.orionTesting#", sql=" 
    SQL HERE 
"); 
var myResult = myQuery.execute().getResult(); 

Для выполнения запроса запросов (квартальном) на основе существующего запроса с тегами:

<cfquery name="local.qUpdateCRDRMemo" dbtype="query"> 
    SELECT * FROM existingQueryName 
</cfquery> 

Для выполнения запроса запросов на основе существующего запроса в сценарии:

var myQuery = new Query(dbtype="query", QoQSrcTable="#existingQueryName#", sql=" 
    SELECT * FROM QoQsrcTable 
"); 
var myResult = myQuery.execute().getResult(); 

Есть разный синтаксиса вы но это обычно, как я это делаю. Ответ на ваш вопрос: ваш сценарий и теги «версии» не делают то же самое. dbtype attribute указывает, будет ли запрос выполняться с внешним источником данных или локальным запросом. Пример ваших тегов попадает в внешний источник данных. Пример скрипта пытается выполнить локальный запрос.

Query of Queries довольно мощный, поэтому, если вы не знаете об этом, я бы прочитал об этом, так как он прольет свет относительно происходящего и почему он не работает должным образом.

Простым ответом является удаление dbtype="query" и добавление источника данных к версии вашего скрипта.

... WHERE crdr_memo_id = [local].adjustment" 
    , {} 
    , {datasource="#Application.dsn.orionTesting#"} 
); 
+0

Хорошее объяснение. Можно также добавить пример, используя [queryExecute()] (https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-m-r/queryexecute.html). Новая функция ядра имеет некоторые улучшения в отношении 'нового Query()' на основе cfc. – Leigh

+0

Это в cf2016? Я все еще на 10. – Leeish

+0

Gotcha. Просто проверил документы. Он был добавлен в CF11. – Leigh