Причина, по которой вы получаете ошибки, заключается в том, что вы отправляете каждую строку в оболочку по отдельности. Если весь ваш оператор был заключен в одну пару обратных галочек, он может работать.
Но если вы действительно не можете установить нужные гемы, поместите команды во временный файл и скажите sqlplus выполнить это, например:
require 'tempfile'
file = Tempfile.open(['test', '.sql'])
file.puts "set serveroutput on;"
file.puts "commit;"
file.puts "insert /*+ APPEND*/ INTO table(col1, col2) values (#{data[0]},#{data[1]});"
file.puts "exit;" # needed or sqlplus will never return control to your script
file.close
output = `sqlplus user/pswd@host @#{file.path}`
file.unlink
Вы должны быть очень осторожны:
- Цитирование значений (если вы используете oci8 / dbi, вы можете использовать переменные связывания)
- Обработка ошибок. При использовании ruby-библиотек ошибки могут вызывать исключения Используя sqlplus, вам придется анализировать вывод. Тьфу!
Так что это можно сделать, но я настоятельно рекомендую вам прыгнуть через все обручи, необходимые для правильной установки oci8 (и, возможно, ruby-DBI):)
ps Вы уверены, что хотите зафиксировать перед вставкой?