[R-sig-DB] RODBC and Oracle 11g Issue.....

Joe O jjo_ch|c@go @end|ng |rom y@hoo@com
Fri Mar 5 16:54:21 CET 2010


> OK....stoopid question time:
> 
> 1. I presume that you installed the 64 bit version of
> Oracle's instant client and ODBC driver from:
> 
>    http://www.oracle.com/technology/software/tech/oci/instantclien/htdocs/linuxx86_64soft.html

 Absolutely. From my first post, I know this was done properly (and configured properly) since the sqlplus interface works just fine.
 
> 2. You are running a 64 bit version of R?  Check the
> output of .Machine$sizeof.pointer and be sure that it shows
> 8, not 4.

  It is showing 8, see session output below.
> 
> 3. You are using a 64 bit version of unixODBC?

  Yes, I downloaded the latest version yesterday, and compiled it on the machine locally. I also know this is configured correctly because the iSQL session output in my first post is correct as well.
 
> Just to be sure, since the entire tool chain needs to be 64
> bit, although typically you might get a segfault or other
> problem when mixing 32/64 bit.

 Yep, that is clear. iSQL and sqlplus are working OK, so I think the stack is aligned properly. 

> Also, just for the heck of it, can you post the output of:
> 
>   unclass(channel)

  See below
 
> 
> Lastly, try using 'case = "toupper"' in the odbcConnect()
> call to see if that makes any difference:
> 
>   channel <- odbcConnect("OracleLocal",
> uid="parts", pwd="parts", rows_at_time = 1, case =
> "toupper")

  Again, no dice. See below

[ruser using akoyavsrv05 ~]$ R

R version 2.10.0 (2009-10-26)
Type 'q()' to quit R.

> .Machine$sizeof.pointer
[1] 8
> library(RODBC)
> channel <- odbcConnect("OracleLocal", uid="parts", pwd="parts", rows_at_time = 1, case = "toupper")
> unclass(channel)

[1] 1
attr(,"connection.string")
[1] "DSN=OracleLocal;UID=parts;PWD=******;DBQ=VSRV06;DBA=W;APA=T;EXC=T;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=0;MLD=0;ODA=F;"
attr(,"handle_ptr")
<pointer: 0x1495a80>
attr(,"case")
[1] "toupper"
attr(,"id")
[1] 83755
attr(,"believeNRows")
[1] TRUE
attr(,"colQuote")
[1] "\""
attr(,"tabQuote")
[1] "\""
attr(,"interpretDot")
[1] TRUE
attr(,"encoding")
[1] ""
attr(,"rows_at_time")
[1] 1
attr(,"isMySQL")
[1] FALSE
attr(,"call")
odbcDriverConnect(connection = "DSN=OracleLocal;UID=parts;PWD=******;",
    case = "toupper", rows_at_time = 1)
> sqlQuery(channel, "select distinct segment from parts", errors=TRUE, rows_at_time = 1)

character(0)



Now here is something interesting...at least R is talking to Oracle:

> sqlQuery(channel, "select distinct segment from partsddddddddd",errors=TRUE,rows_at_time = 1)

[1] "42S02 942 [Oracle][ODBC][Ora]ORA-00942: table or view does not exist\n"

[2] "[RODBC] ERROR: Could not SQLExecDirect 'select distinct segment from partsddddddddd'"

It knows no table named 'partsddddddddd' exists....so Oracle is processing the query and returning an error, which R is getting.


No errors in the machine wide ODBC log that is enabled.







More information about the R-sig-DB mailing list