이 문제의 맨 아래로 가려고 너무 많은 시간을 보낸 후에 나는 후손에 대한 대답을 기록하고 싶습니다. 사실 dbReadTable
에는 스키마가 필요하지 않지만 대문자로 테이블 이름을 지정하는 것은 유용합니다. 즉, 전화는
이어야합니다.
이
dbReadTable
가
select * 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")
하지 않는 이유
는 그래서입니다.
실제로, 나는 스키마가 필요 없다는 것을 알았지 만, 테이블 이름은 대문자로'dbReadTable'에 있어야합니다 (그러나'dbGetQuery'에는 없습니다). 아래 내 대답을 참조하십시오. –