Почему выступление не работает в SQLQUERY в RODBC?
-
26-09-2019 - |
Вопрос
Мы сохраняем все наши лабораторные данные в базе данных 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 Server в любом месте] Столбец не найден: столбец« RP »не найден« »« [RODBC] ошибка: не удалось SQLEXECDirect 'Select * from CGS.specimen, где CUSTIMECODE = "RP " '' "
Я играл с кавычками, и я играл с побегами, но увы я никуда не получил.
например
indivs <-sqlQuery(channellab,'SELECT * from CGS.Specimen WHERE StudyCode= 'RP' ')
Ошибка: Неожиданный символ в «Indivs <-SQLQuery (Channellab», выберите * от CGS.SPECIMEN, где CUSCODECODE = 'RP "
indivs <-sqlQuery(channellab,"SELECT * from CGS.Specimen WHERE StudyCode= 'RP' ")
Ошибка в .call (c_rodbcfetchRows, attr (канал, "handle_ptr"), max, puffsize,: отрицательные векторы не допускаются
Что ты посоветуешь?
Решение
Последняя ошибка, которую вы сообщаете, из функции .Call к функции C RODBCFetchRows. Таким образом, ваша проблема с кавычками, кажется, решается. Однако с указанной ошибкой у вас все еще есть проблема. Возможно, строки неправильно сообщаются (функция C пытается выделить векторы на основе этого значения, но не проверяет отрицательные значения). Пытаться:
indivs <-sqlQuery(channellab,"SELECT * from CGS.Specimen WHERE StudyCode= 'RP'", believeNRows = FALSE)
Другие советы
Отредактировано:
indivs <-sqlQuery(channellab,'SELECT * from CGS.Specimen WHERE StudyCode=\'RP\'')
Хорошо, вы можете запустить другой запрос, где возвращаются некоторые данные?
WHERE StudyCode=StudyCode
Например? Дает ли это ту же ошибку о -ве длиной?
Это означает, что вышеупомянутое является правильным для избежания учебного кода. -Воль длится еще одна ошибка. Можете ли вы вернуть не все столбцы с * но определенными столбцами, где нет нулей?
Попробуйте вариант Believenrows = false. Это работало для меня по аналогичной ошибке (ошибка отрицательной длины).
Этот вопрос был больше до такой степени:Запрос Oracle DB от Revolution R Использование RODBC