2017-09-14 4 views
1

dplyr 0.7.0のリリースでは、odbcパッケージを使用してOracleに接続することが簡単になりました。しかし、私は、デフォルトのスキーマ内にないテーブルにアクセスする際に問題に遭遇しています(それは私のユーザ名です)。たとえば、スキーマTEST_SCHEMAにテーブルTEST_TABLEがあるとします。次に、データを取得するSQL構文の例はselect * from TEST_SCHEMA.TEST_TABLE'です。 dplyrを使用して、デフォルトのOracleスキーマにないテーブルにアクセスするにはどうすればよいですか?

はdplyr `で同じことを行うには、私がしようとしています次:

# make database connection using odbc: [here's a guide][1] 
oracle_con <- DBI::dbConnect(odbc::odbc(), "DB") 
# attempt to get table data 
tbl(oracle_con, 'TEST_SCHEMA.TEST_TABLE') 

さて、これはエラーメッセージにつながる:

Error: <SQL> 'SELECT * 
FROM ("TEST_SCHEMA.TEST_TABLE") "zzz12" 
WHERE (0 = 1)' 
    nanodbc/nanodbc.cpp:1587: 42S02: [Oracle][ODBC][Ora]ORA-00942: table or view does not exist 

が、私はここでの問題は、二重引用だと思いますマークとしては、

DBI::dbGetQuery(oracle_con, "select * from (TEST_SCHEMA.TEST_TABLE) where rownum < 100;") 

があります。

答えて

1

これはしばらくの間、私がintroductiondbplyrの底に解決策を見つけるまで苦労しました。スキーマとテーブルのコンボを指定するための正しい構文は次のとおりです。

余談として
tbl(oracle_con, in_schema('TEST_SCHEMA', 'TEST_TABLE')) 

、私は引用符で問題がここに詰まっていると思う:https://github.com/tidyverse/dplyr/issues/3080

は、次の代替の回避策があることかもしれませんあなたがしたいことに応じて適切なものにしてください。 tbl(oracle_con, 'TEST_TABLE')が動作するまでの

DBI::dbSendQuery(oracle_con, "alter session set current_schema = TEST_SCHEMA") 

:接続がDBIを使用しているので、一つは経由してスキーマを変更することができます。

それとも、あなたが表示権限を作成している場合、あなたはあなたが興味のある任意のテーブルにデフォルト・スキーマで「ショートカット」を作成することができます。後者により適していることを

DBI::dbSendQuery(oracle_con, "CREATE VIEW TEST_TABLE AS SELECT * 
       FROM TEST_SCHEMA.TEST_TABLE") 

注意結合のためにローカル・データをデータベースにコピーするが、表の元のスキーマへの書込みアクセス権を持たないアプリケーション。

関連する問題