ORACLE ORA00907: Различия в строке подключения с использованием OraOLEDB.Oracle и TNS поиска через Oracle в OraClient10g_home3

Я использую Oracle Client 10.2g и, изменив строку подключения к базе данных Oracle, теперь я получаю ошибку ORA00907 для некоторых моих запросов.

Код выполняется в Excel 2010 с использованием VBA, и я могу без проблем выполнить более 20 запросов, используя следующую строку подключения:

ServerConnectionString="Driver={Oracle in OraClient10g_home1};Dbq=DBNAME;Uid=USERNAME;Pwd=PASSWORD;"
With OpenR2DBConnection
    .ConnectionTimeout = ConnectionTimeout
    .Open ServerConnectionString
    .Execute "ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY'"
    .CommandTimeout = CommandTimeout
End With

Изменяя только строку подключения:

ServerConnectionString="Provider=OraOLEDB.Oracle;Data Source=(<<<data exact translation from TNSNAMES file for the DBNAME>>>);User id=USERNAME;Password=PASSWORD;"

2 из 20+ запросов завершаются с ошибкой ORA-00907: отсутствует правая скобка

Один из запросов, который терпит неудачу (преломляется):

select  n1.name,n1.sdate,n1.edate,n1.note as crnote,n1.cdate ,n1.pri
  from 
  ( 
    select n.name,n.sdate,n.edate,n.note,n.cdate,n.pri , RANK() OVER (PARTITION BY n.sdate,pri ORDER BY (n.adate - n.cdate) asc,n.pri asc) RANK
    from 
    (   
        select mmpe.name,mmpe.sdate,mmpe.edate,mmpe.cannote as note,mmpe.cdate,mmip.crdate as adate,mp.pri
        from mmpe  ,mmmip mmip,  mp
        where <<clauses1>>
        and  mmpe.name in (<<list of strings>>)
        and  mmip.name(+) =  mmpe.name
        and <<more clauses2>>
    union   
        Select  mmip.name,mmip.sdate,greatest(<<formula>>) as edate , <<create note>> as note ,mmip.crdate as cdate, td.adate,mp.pri
        From mi , mmip,td, mp
        Where <<clauses3>>
        and  mi.name in (<<list of strings>>)
    union all
        Select  mmip.name,mmip.sdate,mmip.edate  as edate , <<create note>> as note ,mmip.crdate as cdate , td.adate,mp.pri
        From mi , mmip,td, mp
        Where <<clauses4>>
        and  mi.name in (<<list of strings>>)
union
        Select  mmip.name,mmip.sdate,td.cddate-1  as edate , <<create note>> as note, mmip.crdate as cdate,mmip.crdate as adate,mp.pri
        From mi , mmip,td, mp
        Where <<clauses4>>
        and  mi.name in (<<list of strings>>)
    ) n
  ) n1
where rank = 1
order by 6,2,5;

Я проверил, что запрос правильно работает в Oracle SQL Developer. Я проверил, что до выполнения запроса операторы SQL идентичны для обеих строк подключения.

Другой неудачный запрос также использует функцию объединения и ранга, но она не единственная.

Причина, по которой я хочу использовать соединение OraOLEDB.Oracle, заключается в том, что я пытаюсь удалить свою зависимость от файлов tnsnames.ora, так как время от времени я добавляю новые экземпляры базы данных и хочу, чтобы все мои пользователи не обновляли этот файл в каталог оракула.

Наконец, база данных ORACLE - версия 8.

Любая помощь будет принята с благодарностью,

Заранее спасибо!

Обновлено: удалена ошибка опечатки

1 ответ

Решение

Хорошо, я решаю это.

Спасибо всем, кто провел какое-то время, думая об этом.

Когда я перефразировал приведенный выше пример, я удалил встроенные комментарии, обозначенные как "-". Именно эти комментарии вызвали ошибку ORA-00907 с драйвером OraOLEDB.Oracle.

Так что исправить это просто: удалите комментарии из команды SQL!

Еще раз спасибо!

Другие вопросы по тегам