Во-первых, кажется, вы немного смущены границами и разделением между различными частями технологии, которые вы используете. В указанном вами коде нет Watir, НЕТ. все это чистый Ruby и немного материала от OCI8 Gem. GEM - это стандартный способ, которым люди из Ruby используют для распространения библиотек кода и программ, написанных на языке Ruby. См. ЗДЕСЬ для получения дополнительной информации, чтобы лучше понять, что такое драгоценные камни и как они используются.
Watir - еще один гем Ruby, предназначенный для управления веб-браузерами, и вы можете использовать его в другом месте своего кода, но он не относится к этому вопросу или к OCI8, за исключением того, что оба они являются библиотеками кода Ruby, распространяемыми как Gems , Так что давайте оставим это в стороне, чтобы не путать вещи.
Поведение, которое вы видите, - это то, как работает гем OCI8, а НЕ какое-либо отношение к Ruby. Если вы хотите что-то более элегантное, посмотрите на другие гемы, созданные для доступа к БД с помощью Ruby, например ActiveRecord, который уже предлагался в другом ответе. Gem OCI8 возвращает массив, только если у вас есть результаты, поступающие в блок, как в текущем коде. В противном случае результаты находятся в объекте, называемом Курсором, и вы можете использовать метод fetch_hash курсора, чтобы получить извлеченные данные в виде хэша. Ключами хеша являются имена столбцов. (см. http://ruby -oci8.rubyforge.org / ru / api_OCI8Cursor.html )
Позвольте мне настоятельно рекомендовать потратить немного времени на изучение языка Ruby, прежде чем углубляться в свой текущий проект. Учитывая характер кодирования, который вы, похоже, делаете, я бы посоветовал вам прочитать книгу Брайана Марика "Повседневные сценарии с Ruby", которая поможет вам лучше понять технологию, которую вы используете, и вы поймете лучше, когда мы подбрасываем такие термины, как «хэш», как я только что сделал.
Если вы позволите немного общих советов относительно того, как вы собираетесь взаимодействовать с вашей базой данных. ИМХО, вы должны воспользоваться преимуществами базы данных, создав запрос, который возвращает просто нужные вам данные, вместо того, чтобы собирать огромные объемы данных и пытаться проанализировать их вручную. Лучше использовать ресурс, использовать меньше памяти, тратить меньше времени на передачу информации из БД, и, независимо от того, насколько хорошим может быть ваш код синтаксического анализа, он не будет так хорош, как написали люди из Oracle. Пусть БД делает тяжелую работу, вот для чего она.
Если здесь вы имеете дело с данными, необходимыми для тестирования или проверки результатов, а не для создания одного огромного монолитного массива, я бы порекомендовал вам использовать гораздо более модульный подход. Используйте одну глобальную переменную, такую как EMP_ID текущего пользователя, с которым вы тестируете, с или против, и пусть тестовый код получит результаты запроса только для значений, необходимых для каждой проверки, или небольшую логическую группу проверок, например, части адреса. Гораздо проще создавать вещи таким образом, чтобы они работали по мере необходимости, вместо того, чтобы пытаться записать весь бит извлечения данных в один гигантский кусок, который будет кошмаром для обслуживания.
В таком виде весь ваш тестовый код, который проверяет функцию или проверяет, как работает сайт, будет тесно связан с большой монолитной частью, которая извлекает данные из базы данных. это создает много зависимостей и усложняет поддержку вашего тестового кода. Если вы имеете дело с вещами более модульным образом, где каждый шаг проверки извлекает только те данные, которые ему нужны, тогда гораздо проще расширить или изменить тестовый код при изменении сайта или базы данных.