SQL-поиск в Ruby - PullRequest
       32

SQL-поиск в Ruby

2 голосов
/ 13 октября 2009

Хорошо, это похоже на двойной вопрос: SQL Super Search но это другой подход. Раньше я искал простой и эффективный способ сделать это полностью на стороне базы данных, но теперь мне было интересно, кто-нибудь знает, как сделать что-то подобное в Ruby.

Я пробовал это, и хотя я могу запустить базовый

*SELECT table_name, column_name FROM INFORMATION_SCHEMA.COLUMNS*  

Кажется, я не могу запустить последующие запросы, не получив

' WARNING: #<ODBC::Statement:0x2c73e84> was not dropped before garbage collection. '

Может кто-нибудь показать мне действительно простой способ просто запустить текст SQL и проанализировать результаты (и в идеале выполнить больше запросов на основе этих результатов)?

РЕДАКТИРОВАТЬ: Чтобы уточнить, мой код БД до сих пор выглядит следующим образом:

oConn = DBI.connect('DBI:ODBC:AX')
oConn2 = DBI.connect('DBI:ODBC:AX')

sth = oConn.execute("Select table\_name, column\_name from information\_schema.columns")
sth.fetch do |row|
  table = row["table\_name"]
  column = row["column\_name"]
  puts table + "," + column
 #Dynamic sql here
  sth2.fetch do |row2|
    puts row2[0]
  end
end
sth.finish

1 Ответ

2 голосов
/ 15 октября 2009

Это предупреждение , согласно Кристиану Вернеру . Попробуйте oConn.finish после oConn.execute и не забудьте .disconnect в конце.

irb(main):033:0> require 'dbi'
=> false

irb(main):034:0> oConn=DBI.connect('DBI:ODBC:Blacklisted')
=> #<DBI::DatabaseHandle:0x2d50af0 @trace_mode=2, @handle=#<DBI::DBD::ODBC::Database:0x2d50a3c @attr={}, @handle=#<ODBC::Database:0x2d50a64>>, @trace_output=#<IO:0x2846adc>>

irb(main):035:0> sth = oConn.execute("Select * from blacklistednews where id=12140")
=> #<DBI::StatementHandle:0x2d4c838 @trace_mode=2, @fetchable=true, @row=[nil, nil, nil, nil, nil, nil], @handle=#<DBI::DBD::ODBC::Statement:0x2d4c784 @arr=[],@params=[], handle=#<ODBC::Statement:0x2d4c7c0>>, @cols=["id", "title", "url","description", "pubdate", "synced"], @trace_output=#<IO:0x2846adc>, @prepared=false>

irb(main):036:0> sth.finish
=> nil

irb(main):037:0> oConn.disconnect
=> nil

irb(main):038:0>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...