2016-09-07 6 views
1

ROracle (directions in the package 다음)을 설치하고 Oracle 데이터베이스에 성공적으로 연결했습니다.ROracle : dbGetQuery가 작동하지만 dbListTables 및 다른 함수가 없습니다

내가 dbGetQuery를 사용하여 쿼리를 실행하고 잘 결과를 얻을 수는, 예를 들면 :

> dbListTables(con) 
character(0) 

> dbReadTable(con, "table_name") 
Error in .oci.GetQuery(con, qry) : 
    ORA-00942: table or view does not exist 

모든 :

> dbGetQuery(con, "select count(*) from table_name") 
    COUNT(*) 
1  6111 

그러나, 다른 DBI/ROracle 도우미 기능 중 일부는 어떤 결과를 제공하지 않습니다 원인이 무엇인지 아이디어? 나는 schema 인수를 지정하면 두 경우 모두

답변

1

, 그들은, 또한, 그것은 모든 스키마에보고할지 여부를 제어 allfull 인수를 가지고 ?dbListTables을 읽고 표시

dbListTables(con, schema = "my_schema") 
dbReadTable(con,"table_name",schema = "my_schema") 

즉, 나를 위해 작동 전체 스키마 이름 또는 테이블 이름 만 반환할지 여부를 지정합니다.

+0

실제로, 나는 스키마가 필요 없다는 것을 알았지 만, 테이블 이름은 대문자로'dbReadTable'에 있어야합니다 (그러나'dbGetQuery'에는 없습니다). 아래 내 대답을 참조하십시오. –

0

이 문제의 맨 아래로 가려고 너무 많은 시간을 보낸 후에 나는 후손에 대한 대답을 기록하고 싶습니다. 사실 dbReadTable에는 스키마가 필요하지 않지만 대문자로 테이블 이름을 지정하는 것은 유용합니다. 즉, 전화는

이어야합니다.

dbReadTableselect * from table 전화와 dbGetQuery 다른 방법을 알아 보려면, 나는 소스 파 :

> showMethods("dbReadTable") 
Function: dbReadTable (package DBI) 
conn="OraConnection", name="character" 

그래서 그것이 S4 방법입니다. 우리는 위의 서명 getMethod를 사용

> getMethod("dbReadTable", signature = c(conn = "OraConnection", name = "character")) 
Method Definition: 

function (conn, name, ...) 
{ 
    .local <- function (conn, name, schema = NULL, row.names = NULL, 
     ...) 
    .oci.ReadTable(conn, name, schema = schema, row.names = row.names) 
    .local(conn, name, ...) 
} 
<environment: namespace:ROracle> 

.oci.ReadTable이 ROracle의 소스, here을 찾을 수 있습니다. 인수 유효성을 확인하고 dbGetQuery을 호출하고 행 이름을 설정하는 것뿐입니다. (dbGetQuery를 호출) 관련 부분은 여기에 있습니다 : ". 스키마"스키마가 지정되지 않은 경우, 테이블의 이름이없이 사용할 것을

# form name 
if (is.null(schema)) 
    tab <- sprintf('"%s"', name) 
else 
    tab <- sprintf('"%s"."%s"', schema, name) 

# read table 
qry <- paste('select *', 
       'from', tab) 
res <- .oci.GetQuery(con, qry) 

접두사. 그러나 sprintf은 테이블 이름의 인용 문자열을 생성하고 quoted table names are case sensitive! ( dbGetQuery는 소문자 할 수있는 인용 부호로 둘러싸이지 않은 테이블 이름을 전달합니다.) dbGetQuery(con, "select count(*) from table_name") 작품, 마찬가지로 dbReadQuery(con, "TABLE_NAME")하지만 dbReadQuery(con, "table_name")하지 않는 이유

는 그래서입니다.