Mam następujący kod, który wykonuje widokiem Oracle w następujący sposób:Ruby on Rails przygotowane oświadczenie do widoku Oracle/funkcja
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
Wyjście powyższego zapytania jest następująca:
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')))
Problem polega na tym, że powyższe zapytanie ma lukę SQL injection.
Tak, próbowałem dodać przygotować oświadczenie w następujący sposób:
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])
pojawia się następujący błąd now:
NoMethodError: undefined method `type' for "'ALL'":String: SELECT * FROM TABLE(FN_REQRESP(?,?,?,?,?,?,?,?,?))
To pojedyncze cytaty, które brudząc ją wierzę. Czy istnieje sposób na pokonanie tego?
EDIT: Próbowałem odpowiedź NDN i błąd poniżej:
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\')'))
może to głupie pytanie, i jest potrzebne dla wyroczni, ale czy próbowałeś usunąć "[" i "]"? dla mnie wygląda na to, że próbujesz podać drugi? tablica, również prawdopodobnie o nazwie zmiennych wiążących byłaby dobrym pomysłem: http://millarian.com/rails/quick-tip-rails-named-bind-variables/ –
Tak, próbowałem usunąć [] i dostałem to ArgumentError : zła liczba argumentów (11 za 3) – Micheal
również nie mogę używać nazwanych zmiennych bind, ponieważ jest to funkcja Oracle i nie znam nazw kolumn. Wiem tylko, jakie parametry mogę przekazać – Micheal