У меня есть форма с возможностью добавления дополнительных полей. Пользователь может добавить столько полей, сколько он хочет. Как только они отправят форму, мне нужно перебрать область действия from
и вставить записи в базу данных ORACLE. Это пример моего кода:
<cfquery name="insertRec" datasource="dbs">
INSERT INTO myTbl(
RecordID, First, Last, Email, Subject, Description, ActionDt
) VALUES
<cfset count = 1>
<cfloop from="1" to="#arrayLen(arrData)#" index="i">
(
SYS_GUID(),
<cfqueryparam cfsqltype="cf_sql_varchar" value="#trim(form.first)#" maxlength="50">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="#trim(form.last)#" maxlength="50">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="#trim(form.email)#" maxlength="320">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="#trim(form.column1)#" maxlength="100">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="#trim(form.datadescr1)#" maxlength="4000">,
CURRENT_TIMESTAMP
)
<cfif count NEQ arrayLen(arrDpr)>,</cfif>
<cfset count++>
</cfloop>
Первая проблема, когда я пытался протестировать приведенный выше код, связана с оператором Oracle Insert. Я получаю сообщение об ошибке:
[Macromedia][Oracle JDBC Driver][Oracle]ORA-00933: SQL command not properly ended
Я просмотрел сообщение об ошибке, и код вставки Oracle выглядит следующим образом:
INSERT INTO myTbl(
RecordID, First, Last, Email, Subject, Description, ActionDt
) VALUES (
SYS_GUID(),
(param 1) ,
(param 2) ,
(param 3) ,
(param 4) ,
(param 5) ,
CURRENT_TIMESTAMP
) ,
(
SYS_GUID(),
(param 1) ,
(param 2) ,
(param 3) ,
(param 4) ,
(param 5) ,
CURRENT_TIMESTAMP
) ,
(
SYS_GUID(),
(param 1) ,
(param 2) ,
(param 3) ,
(param 4) ,
(param 5) ,
CURRENT_TIMESTAMP
)
Приведенный выше код явно неверен, и строка вставки SQL построена неправильно. Мне интересно, как это можно исправить? Каков наилучший способ сделать это в ColdFusion for ORACLE Database?
Также другая проблема, с которой я столкнулся, связана с ColdFusion и выводом индекса массива в cfqueryparam
. Как вы можете видеть выше, значения для столбцов Subject и Description жестко закодированы. Я пытаюсь найти способ вывода значения индекса массива. Так, например, если мой массив имеет значения [1,3,2]
, то в cfloop мне нужно получить это в cfqueryparam:
<cfqueryparam cfsqltype="cf_sql_varchar" value="#trim(form.column#i#)#" maxlength="50">
<cfqueryparam cfsqltype="cf_sql_varchar" value="#trim(form.datadescr#i#)#" maxlength="500">
Код выше неверен, и я не могу иметь ## внутри другого ##. Есть ли способ получить действительное значение i
, добавленное к column
и datadescr
? Они будут выглядеть так:
column1 datadescr1
column3 datadescr3
column2 datadescr2
Я новичок в мире Oracle, и я не могу этого понять. Любая помощь будет принята с благодарностью.