У меня есть следующий код, который выполняет вид оракула следующим образом:рубин на рельсах подготовили заявление для просмотра оракула/функция
def run_query
connection.exec_query(
"SELECT * FROM TABLE(FN_REQRESP(#{type_param},
#{search_type_param},
#{tid_param},
#{last_param},
#{key_param},
#{tran_id_param},
#{num_param},
#{start_date_param},
#{end_date_param}))")
end
Выходной сигнал вышеупомянутого запроса выглядит следующим образом:
SELECT * FROM TABLE(FN_REQRESP('ALL',
'ALL_TRAN',
'100007',
'',
'',
'',
'',
TO_DATE('27-January-2017','dd-MON-yy'),
TO_DATE('31-January-2017','dd-MON-yy')))
Проблема заключается в том, что в вышеприведенном запросе есть уязвимость SQL-инъекций.
Итак, я попытался добавить подготовить заявление следующим образом:
connection.exec_query('SELECT * FROM TABLE(FN_REQRESP(?,?,?,?,?,?,?,?,?))','myquery',[type_param,search_type_param,tid_param,last_param,key_param,tran_id_param,num_param,start_date_param,end_date_param])
Я получаю следующую ошибку сейчас:
NoMethodError: undefined method `type' for "'ALL'":String: SELECT * FROM TABLE(FN_REQRESP(?,?,?,?,?,?,?,?,?))
Это одиночные кавычки, что Мессинг его я считаю. Есть ли способ преодолеть это?
EDIT: Я попытался ответить NDN в и ошибке ниже:
OCIError: ORA-00907: missing right parenthesis: SELECT * FROM TABLE(FN_REQRESP('\'ALL\'',
'\'ALL_TRAN\'',
'\'100007\'',
'\'\'',
'\'\'',
'\'\'',
'\'\'',
'TO_DATE(\'01-February-2017\',\'dd-MON-yy\')',
'TO_DATE(\'10-February-2017\',\'dd-MON-yy\')'))
Возможно, это глупый вопрос, и это необходимо для оракула, но попытались ли вы удалить «[» и «]»? для меня похоже, что вы пытаетесь дать второе? массив, также вероятно названный переменными связывания, был бы неплохой идеей здесь: http://millarian.com/rails/quick-tip-rails-named-bind-variables/ –
да, я попытался удалить [] и получил это ArgumentError : неправильное количество аргументов (11 для 3) – Micheal
также я не могу использовать именованные переменные связывания, поскольку это функция оракула, и я не знаю имена столбцов. Я знаю только, какие параметры я могу пройти – Micheal