Почему оператор WHERE не работает в sqlQuery в RODBC? - PullRequest
0 голосов
/ 02 сентября 2010

Мы храним все наши лабораторные данные в базе данных Sybase.Когда я хочу выполнить манипулирование данными и анализ, я считываю данные в R с помощью RODBC.

library(RODBC)
channellab <- odbcConnect("Labdata")
indivs <-sqlQuery(channellab,'SELECT * from CGS.Specimen')

Пока все хорошо, за исключением того, что CGS.Specimen является таблицей для всей нашей лаборатории.Есть почти 40000 образцов (строк) с 66 переменными.Чтение занимает ненужное количество времени, особенно когда меня интересуют материалы одного исследования, в котором содержится около 1000 экземпляров.Очевидный способ исправить это будет

indivs <-sqlQuery(channellab,'SELECT * from CGS.Specimen WHERE StudyCode="RP"')  

Но когда я запускаю, я получаю

[1] "42S22 -143 [Sybase] [Драйвер ODBC] [Adaptive ServerAnywhere] Столбец не найден: Столбец 'RP' не найден "" [RODBC] ОШИБКА: Не удалось SQLExecDirect 'SELECT * from CGS.Specimen WHERE StudyCode = \ "RP \"' "

У меня естьиграл с кавычками, а я играл с косой чертой, но, увы, я никуда не попал.

, например,

indivs <-sqlQuery(channellab,'SELECT * from CGS.Specimen WHERE StudyCode= 'RP'  ')

Ошибка: неожиданный символ в "вязи <-sqlQuery (channellab, 'SELECT * from CGS.Specimen WHERE StudyCode =' RP "</p>

indivs <-sqlQuery(channellab,"SELECT * from CGS.Specimen WHERE StudyCode= 'RP'  ")

Ошибка в .Call (C_RODBCFetchRows, attr (channel, "handle_ptr"), max, buffsize,: запрещены векторы отрицательной длины

Что вы предлагаете?

Ответы [ 3 ]

4 голосов
/ 02 сентября 2010

Последняя ошибка, о которой вы сообщаете, - от функции .Call до функции c RODBCFetchRows.Таким образом, ваша проблема с кавычками, кажется, решена.Однако с указанной ошибкой у вас все еще есть проблема.Возможно, о строках сообщается неправильно (функция c пытается выделить векторы на основе этого значения, но не проверяет наличие отрицательных значений).Попробуйте:

indivs <-sqlQuery(channellab,"SELECT * from CGS.Specimen WHERE StudyCode= 'RP'", believeNRows = FALSE)
2 голосов
/ 17 декабря 2010

Попробуйте параметр believeNRows = FALSE.Это сработало для меня при аналогичной ошибке (ошибка отрицательной длины).

Этот вопрос был более к сути: Запрос Oracle DB из Revolution R с использованием RODBC

2 голосов
/ 02 сентября 2010

Отредактировано:

indivs <-sqlQuery(channellab,'SELECT * from CGS.Specimen WHERE StudyCode=\'RP\'')  

Хорошо, вы можете запустить другой запрос, где возвращаются некоторые данные?

WHERE StudyCode=StudyCode например?Дает ли это ту же ошибку с длиной -ve?

, это означает, что вышеприведенное верно для экранирования StudyCode.Длина - другая ошибка.Можете ли вы вернуть не все столбцы с *, но конкретные столбцы, в которых нет нулей?

...