Недавно я сделал требования к импорту пакетов и вставленную в базу данных несколько записей.
Решение: инкапсулировать объект сбора списков в программу, а затем вставьте объекты в сбору в базу данных. Поскольку проект использует Mybatis, планируется использовать функцию Foreach Mybatis для пакетной вставки. В течение этого периода я столкнулся с ошибкой «Команда SQL не закончилась правильно», и, наконец, решила ее и записала для будущего обзора и обучения.
Во -первых, я ссылался на информацию о вставке Foreach 'For Foreach, следующим образом:
Foreach в основном используется в строительстве в условиях, он может итерации над коллекцией в заявлениях SQL.
Атрибуты элемента Foreach в основном включают в себя элемент, индекс, коллекцию, открытый, сепаратор и закрытие.
Элемент представляет псевдоним, когда каждый элемент в коллекции является итерацией. Индекс указывает имя, чтобы представить положение, до которой достигается каждая итерация во время итерационного процесса. Open представляет то, что начинается с утверждения, сепаратор представляет то, что символы используются в качестве разделителей между каждой итерацией, и закрыть представляет то, что заканчивается. Наиболее важной и наиболее подверженной ошибкам при использовании Foreach является атрибут коллекции. Этот атрибут должен быть указан, но в разных случаях значение атрибута отличается. Есть три основные ситуации:
1. Если передача в одном параметре и тип параметра является списком, значение атрибута коллекции - список
2. Если передача в одном параметре и тип параметра является массивом, значение свойства сбора - массив
3. Если есть несколько параметров, нам нужно инкапсулировать их в карту. Конечно, один параметр также может быть инкапсулен в карту.
Затем следующий XML -файл был записан в соответствии с копией.
xxxmapper.xml файл:
<INSERT ID = "ADDSUPCITY" PARAMETERTYPE = "java.Util.list"> <selectKey keyProperty = "cityId" order = "до" refultype = "string"> <! [cdata [select seq_ocl_supcity.nextval из dual]]> </select> in in in in in in a_ocl_supcity. Gain_desc, sup_id, stat) значения <foreach collection = "list" item = "item" index = "index" seperator = ","> (#{item.cityid, jdbctype = varchar},#{item.citycode, jdbctype = varchar},#{item.cityname, jdbctype = varchar},#{item .AREADESC, jdbctype = varchar},#{item.supid, jdbctype = varchar},#{item.stat, jdbctype = varchar}) </foreach> </insert>Однако после запуска он продолжает сообщать об ошибках, а сообщение об ошибке следующим образом:
### SQL: вставьте в t_ocl_supcity (city_id, city_code, city_name, aem_desc, sup_id, stat) значения (?,?,?,?,?), (?,?
Копирование SQL и запуск в PL/SQL также сообщает о такой же ошибке. Как можно увидеть выше, операторы SQL, выполненные с использованием пакетной вставки, эквивалентны: вставьте в t_ocl_supcity (city_id, city_code, city_name, aem_desc, sup_id, stat) значения (? беспрецедентный. Оглядываясь назад на эту статью, я обнаружил, что это подходит для MySQL, а не для Oracle, поэтому я изменил файл XML:
<INSERT ID = "ADDSUPCITY" PARAMETERTYPE = "java.util.list"> вставьте в t_ocl_supcity (city_id, city_code, city_name, aection_desc, sup_id, stat) select seq_ocl_supcity.nextval city_id, a.*for (foreach collection = "item =" index index "index" index index "index" index "index" index index "index index index index index index index" Все "> select#{item.citycode, jdbctype = varchar} city_code,#{item.cityname, jdbctype = varchar} city_name,#{item.areadesc, jdbctype = varchar} area_desc,#{item.supid, jdbctype = varchch Sup_id,#{item.stat, jdbctype = varchar} stat от двойного </foreach>) a </insert>Пробежать.
В версии Oracle есть несколько вещей, которые нужно отметить:
1. В SQL нет значений;
2. (Selece ...... из двойного);
3. Атрибут сепаратора в теге <foreach> - «Союз все», и запрос будет объединен в набор результатов.
Выше приведено быстрое решение ошибки вставки пакетной вставки функции Oracle+Mybatis Foreach, введенная вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!