Я работаю с приложением Rails, которое взаимодействует с базой данных Oracle.
У меня есть контроллер ProjectsController
с методом register_company
, который устанавливает связь с хранимой процедурой Oracleиз пакета.
Я определил экземпляр plsql из config/initializers/oracle.rb
:
plsql.activerecord_class = ActiveRecord::Base
Это код для контроллера app/controllers/projects_controller.rb
:
class ProjectsController < ApplicationController
$current_user = {
registration_number: 'A00826345',
period: '201912',
campus: 'A'
}
def register_company
@register_result = [0]
@student_companies = [['1', 'Empresa Uno'],['5', 'Empresa Cinco'], ['14', 'Empresa Catorce'], ['30', 'Empresa Treinta']]
@message = []
begin
plsql.PORTAL_SIASS_PKG.SP_ALTA_EMPRESA(
$current_user[:registration_number],
$current_user[:campus],
$current_user[:period],
params[:company][:name],
params[:company][:rfc],
params[:company][:type],
params[:company][:size],
params[:company][:street],
params[:company][:number],
params[:company][:colony],
params[:company][:municipality],
params[:company][:city],
params[:company][:state],
params[:company][:person_name],
params[:company][:person_position],
params[:company][:person_phone1],
params[:company][:person_phone2],
params[:company][:person_ext1],
params[:company][:person_ext2],
params[:company][:person_email],
params[:company][:person_fax],
params[:company][:person_schedule],
params[:company][:project_activities],
params[:company][:project_description]
) do |cursor|
@register_result = cursor[:resultado]
puts @register_result.to_s
@message = cursor[:mensaje].fetch_all
puts @message
@student_companies = cursor[:p_recordset].fetch_all
end
rescue StandardError => e
puts e
@register_result = [1]
@message = [e.message]
end
respond_to do |format|
format.js {render 'new_company'}
end
end
end
Проблемаесть, когда я пытаюсь сделать запрос, отправляя данные, сервер показывает ошибку:
Completed 500 Internal Server Error in 190ms (ActiveRecord: 0.0ms)
OCIError (ORA-24338: statement handle not executed):
app/controllers/projects_controller.rb:72:in `register_company'
Rendering C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/actionpack-5.0.7.2/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb
Rendering C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/actionpack-5.0.7.2/lib/action_dispatch/middleware/templates/rescues/_source.text.erb
Rendered C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/actionpack-5.0.7.2/lib/action_dispatch/middleware/templates/rescues/_source.text.erb (0.0ms)
Rendering C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/actionpack-5.0.7.2/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb
Rendered C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/actionpack-5.0.7.2/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb (1.0ms)
Rendering C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/actionpack-5.0.7.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb
Rendered C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/actionpack-5.0.7.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb (1.0ms)
Rendered C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/actionpack-5.0.7.2/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb (1103.8ms)
, где строка 72 соответствует вызову хранимой процедуры:
plsql.PORTAL_SIASS_PKG.SP_ALTA_EMPRESA(
Однако, когда я тестирую ту же процедуру в SQL Developer с теми же параметрами, которые я отправляю, она работает правильно.
Я предполагал, что проблема в приложении rails, но я не знаю, где она.
Надеюсь, вы поможете мне решить.