Почему не делает ODP.NET 11 работ развертывания xcopy над машиной с установленным Oracle DB 10?

Вот что может помочь:

Сначала разделите, используя strsplit, затем свяжите элементы, которые принадлежат друг другу

# split the string
vec <- unlist(strsplit(string, '(?=\")(?=\")', perl = TRUE))
vec <- vec[! vec %in% c(' ', '\"')]
# that's how vec looks like right now
head(vec)
# [1] "FundSponsor:Blackrock Advisors" "Category:"                      "Tax-Free Income-Pennsylvania"   "Ticker:"                        "MPA"                           
# [6] "NAV Ticker:"    
#
# now paste the elements
ind <- grepl(':.+',vec)
tmp <- vec[!ind]
vec[!ind] <- paste0(tmp[seq(1,length(tmp),2)], tmp[seq(2,length(tmp),2)])
head(vec)
# [1] "FundSponsor:Blackrock Advisors"        "Category:Tax-Free Income-Pennsylvania" "Ticker:MPA"                            "NAV Ticker:XMPAX"                     
# [5] "Average Daily Volume (shares):26,000"  "Average Daily Volume (USD):[110].335M" 

, с данными

string = "\"FundSponsor:Blackrock Advisors\" \"Category:\" \"Tax-Free Income-Pennsylvania\" \"Ticker:\" \"MPA\" \"NAV Ticker:\" \"XMPAX\" \"Average Daily Volume (shares):\" \"26,000\" \"Average Daily Volume (USD):\" \"[111].335M\" \"Inception Date:\" \"10/30/1992\" \"Inception Share Price:\" \"$15.00\" \"Inception NAV:\" \"$14.18\" \"Tender Offer:\" \"No\" \"Term:\" \"No\""

Объяснение

  • regex (?=\")(?=\") в основном говорит R разбивать строку, когда есть два \". Синтаксис (?!*something*) означает, что *something* идет до / после. Таким образом, вышеприведенное просто гласит: разбить строку в каждой позиции, которой предшествует \" и которая предшествует \" .
  • strsplit(...) выше создает элементы вида \" и ('\"Category:\" \"...' становится вектором '\"';'Category:';'\"';' ';'...'). Таким образом, используя ! vec %in% c(...), мы удаляем эти нежелательные элементы.

Приложение

Если содержатся элементы вида "string:", за которым следует " ", в приведенном выше коде удалите строку vec <- vec[! vec %in% c(' ', '\"')] и добавьте строки

vec <- vec[seq(2L, length(vec), 4L)]
vec[vec == ' '] <- NA_character_
5
задан Josh Kodroff 29 January 2009 в 14:48
поделиться

2 ответа

Так насколько я понимаю проблема была то, что, в то время как Oracle.DataAccess.dll был в том же каталоге как приложение, он не мог найти своих друзей низшего уровня (oci, и др.), следовательно ошибка совместимости.

Оказывается, что, если Вы хотите рвение с развертыванием xcopy ODAC 11 независимо от того, что еще пользователь, возможно, установил на ее машине, необходимо сделать 2 вещи:

  1. Установите переменную окружения PATH для процесса. (Я уже делал это.)
  2. Установите переменную среды ORACLE_HOME для процесса. (Я не делал этого.)

    Environment.SetEnvironmentVariable("PATH", Environment.CurrentDirectory + "\\oracle\\11.1\\odac;" + Environment.CurrentDirectory + "\\oracle\\11.1\\odac\\bin;", EnvironmentVariableTarget.Process);
    Environment.SetEnvironmentVariable("ORACLE_HOME", Environment.CurrentDirectory + "\\oracle\\11.1\\odac", EnvironmentVariableTarget.Process);
    

Править: Также важно отметить, что Oracle бросит эту ошибку не только для проблем охраны окружающей среды, но также и если один из файлов отсутствует на целевой машине. Я получил эту ту же ошибку на других машинах несмотря на Параметры среды, потому что мне установили Подверсию для игнорирования каталогов, названных "мусорным ведром", таким образом, OraOps DLL не копировался в клиент.

4
ответ дан 13 December 2019 в 22:18
поделиться

При использовании клиента оракула 10.2.0.1 или 10.2.0.2 Примечание 215255.1 Oracle указывает, что при применении patchset 10.2.0.3, он устраняет проблему. Получите 10.2.0.3 патча базы данных (852 МБ) и исправьте клиент домой. Да, это - полный сервер базы данных patchset, но это относится к клиенту также.

0
ответ дан 13 December 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: