[sql] NuoDB를 사용하여 Ruby On Rails에서 SQL 명령을 수동으로 실행하는 방법

NuoDB의 프로 시저에 액세스 할 수 있도록 SQL 명령을 수동으로 실행하려고합니다.

Ruby on Rails를 사용하고 있으며 다음 명령을 사용하고 있습니다.

ActiveRecord::Base.connection.execute("SQL query")

“SQL 쿼리”는 모든 SQL 명령 일 수 있습니다.

예를 들어 “Feedback”이라는 테이블이 있고 명령을 실행할 때

ActiveRecord::Base.connection.execute("SELECT `feedbacks`.* FROM `feedbacks`")

요청 된 모든 데이터를 보내지 않고 “참”응답 만 반환합니다.

Rails 콘솔의 출력은 다음과 같습니다.

SQL (0.4ms)  SELECT `feedbacks`.* FROM `feedbacks`
 => true

이것을 사용하여 NuoDB에서 저장 프로 시저를 호출하고 싶지만 프로 시저를 호출하면 “true”응답도 반환됩니다.

어쨌든 SQL 명령을 실행하고 “true”응답을받는 대신 요청 된 데이터를 얻을 수 있습니까?



답변

사용자 지정 SQL 문을 실행하는 데 사용하는 작업 명령은 다음과 같습니다.

results = ActiveRecord::Base.connection.execute("foo")

“foo”는 SQL 문입니다 (예 : “SELECT * FROM table”).

이 명령은 일련의 값을 해시로 반환하여 결과 변수에 넣습니다.

그래서 내 레일 application_controller.rb에 이것을 추가했습니다 :

def execute_statement(sql)
  results = ActiveRecord::Base.connection.execute(sql)

  if results.present?
    return results
  else
    return nil
  end
end

execute_statement를 사용하면 발견 된 레코드가 리턴되고 존재하지 않는 경우 nil을 리턴합니다.

이 방법으로 레일 애플리케이션의 어느 곳에서나 예를 들어 호출 할 수 있습니다.

records = execute_statement("select * from table")

“execute_statement”는 NuoDB 프로 시저, 함수 및 데이터베이스 뷰를 호출 할 수도 있습니다.


답변

나에게 해시를 반환하지 못했습니다.

results = ActiveRecord::Base.connection.execute(sql)

그러나 exec_query 메소드를 사용하면 효과가 있습니다.

results = ActiveRecord::Base.connection.exec_query(sql)


답변

유사한 문제를 가진 다른 사람들을 돕기 위해 포럼에서 답변을 다시 게시 :

@connection = ActiveRecord::Base.connection
result = @connection.exec_query('select tablename from system.tables')
result.each do |row|
puts row
end


답변

res = ActiveRecord::Base.connection_pool.with_connection { |con| con.exec_query( "SELECT 1;" ) }

위의 코드는

  1. 데이터베이스 연결에서 임의의 SQL 실행
  2. 나중에 연결을 다시 연결 풀로 리턴

답변