0

Oracle Client 10.2g を使用していますが、接続文字列を Oracle データベースに変更すると、一部のクエリでエラー ORA00907 が発生します。

コードは VBA を使用して Excel 2010 内で実行されており、次の接続文字列を使用してエラーなしで 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;"

20 以上のクエリのうち 2 つが ORA-00907 で失敗します: 右括弧がありません

失敗したクエリの 1 つ (屈折):

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 接続を使用したい理由は、時々新しいデータベース インスタンスを追加し、すべてのユーザーがこのファイルをオラクルディレクトリ。

最後に、ORACLE データベースはバージョン 8 です。

どんな助けでも大歓迎です、

前もって感謝します!

更新: タイプミスを削除

4

1 に答える 1

0

OK、解決しました。

時間を割いて考えてくれたすべての人に感謝します。

上記の例を屈折させたときに、'--' で示されるインライン コメントを削除しました。OraOLEDB.Oracle ドライバで ORA-00907 エラーが発生したのは、これらのコメントでした。

したがって、修正は簡単です。SQL コマンドからコメントを削除してください。

再度、感謝します!

于 2014-08-15T07:33:02.200 に答える