как обновить столбец oracle clob ruby ​​on rails, ошибка: слишком длинный строковый литерал

Я пытаюсь обновить столбец oracle clob следующим образом:

MyData.where('id=?', id).update_all(['json=?', (json)])

Я получаю следующую ошибку:

OCIError: ORA-01704: слишком длинный строковый литерал: ОБНОВЛЕНИЕ «MYDATA»

Я пробовал следующее:

MyData.where('id=?', id).update_all(['json=?', to_clob(json)])

неопределенный метод `to_clob' для класса

Как мне указать рельсам использовать столбец как clob.

Я использую oracle 12c, rails 5.1 и ruby-2.4.1.

РЕДАКТИРОВАТЬ: update_all(json: json) очищает данные для этого столбца и делает его пустым.


person Micheal    schedule 29.12.2017    source источник
comment
Проблема в том, что ваш update_all пытается отправить в базу данных SQL, подобный update ... set json='some string longer than 4000 characters...' where id = ..., а Oracle не любит строковые литералы длиннее 4k символов. Насколько мне известно, правильным решением является использование связанных параметров, но update_all может оказаться недостаточно умным для этого. update_all(json: json) ведет себя лучше?   -  person mu is too short    schedule 30.12.2017
comment
update_all(json: json) очищает данные для этого столбца и делает его пустым.   -  person Micheal    schedule 02.01.2018
comment
Затем вам нужно найти способ заставить драйвер Oracle использовать подготовленный оператор с привязанным параметром для UPDATE.   -  person mu is too short    schedule 02.01.2018


Ответы (1)


На данный момент я использую следующее решение, чтобы заставить его работать.

MyData.update(id, json: json)
person Micheal    schedule 09.01.2018