RODBC implements odbc database connectivity with compliant
databases where drivers exist on the host system.sqlQuery(channel, query, errors = TRUE, ...)
sqlSave(channel, dat, tablename = NULL, append = FALSE, rownames = FALSE,
colnames = FALSE, verbose = FALSE, oldstyle = FALSE, ...)
sqlFetch(channel, sqtable, ..., colnames = FALSE, rownames = FALSE)
sqlTables(channel, errors = FALSE, as.is = TRUE))
sqlPrimaryKeys(channel, sqtable, as.is = TRUE, errors = FALSE)
sqlColumns(channel, sqtable, errors = FALSE, as.is = TRUE, special = FALSE)
sqlDrop(channel, sqtable, errors = TRUE)
sqlClear(channel, sqtable, errors = TRUE)
sqlCopy(channel, query, destination, destchannel = -1, verbose = TRUE,
errors = TRUE)
sqlCopyTable(channel, srctable, desttable, destchannel = -1, verbose = TRUE,
errors = TRUE)
sqlGetResults(channel, as.is = FALSE, as = "data frame", errors = FALSE,
max = 0, buffsize = 1000, nullstring = "NA", na.strings = "NA")
sqlUpdate(channel, dat, verbose = FALSE, test = FALSE, nastring = NULL)sqlTypeInfo(channel, type = "all", errors = FALSE, as.is = TRUE)
odbcConnect.read.table"data frame",
"matrix" and "transposed matrix", the latter two being
character matrices as returned by the DBMS.NAs
to the database.SQL_NULL_DATA items
from the database.NA when reading data.sqlGetResults."all", "char", "varchar", "real",
"double", "integer", "smallint", "timestamp".sqlTypeInfo
to choose the types of columns when a table has to be created.sql* commands return a data frame on success, or -1/verbose
on error depending on the errors parameter.odbc* commands implement relatively
low level access to the odbc functions of similar name.
sql* commands are higher level constructs to read, save, copy and
manipulate data between data frames and sql tables. Up to 16 connections
can be open at once to any combination of dsn/hosts. Columns are limited
to 255 chars of non-binary data.
sqlQuery is the workhorse function. It sends the SQL statement
query to the server, using connection channel returned by
odbcConnect. Returns a data frame of results, transformed
according to as.is. If errors=FALSE returns -1 on error,
otherwise halts with a message from the server. transposing
reverses columns and rows if TRUE. buffsize will yield a
marginal increase in speed if increased for some database engines
e.g. MSaccess. SQL beginners should note that the term `Query' includes
any valid SQL statement including table creation, alteration, updates
etc as well as SELECTs. The sqlQuery command is a convenience
wrapper that calls first odbcQuery and then
sqlGetResults. If finer-grained control is needed, for example
over the number of rows fetched, these functions should be called
directly. sqlGetResults is a mid-level function. It should be called
after a call to odbcQuery and used to retrieve waiting
results into a dataframe. Its main use is with max set to non
zero it will retrieve the result set in batches with repeated calls.
This is useful for very large result sets which can be subjected to
intermediate processing.
sqlSave saves the data frame dat in the table
dat. The table name is taken from tablename if given or the name
of the dataframe. If the table exists and has the appropriate structure
it is used, or else it is created anew with type varchar(255).
If rownames=TRUE the first column of the table will be the row
labels with colname rowname. rownames
can also be a string giving the desired name (see example). colnames
copied the column names into row 1. This is intended for cases where
case conversion alters the original column names and it is desired that
they are retained. Note that there are drawbacks to this approach:
it presupposes that the rows will be returned in correct order;
not always valid. It will also cause numeric rows to be returned as factors.
WARNING: sqlSave uses the 'great white shark'
method of testing tables (bite it and see). The logic will unceremoniously
DROP the table and create it anew with VARCHAR column types in its attempt
to find a writeable solution. test=TRUE will not necessarily predict
this behaviour. Attempting to write indexed columns or writing to pseudo-
columns are less obvious causes of failed writes followed by a DROP.
If your table structure is precious to you back it up.
sqlFetch loads the
the entire contents of the table dat. (The reverse of
sqlSave.) Rownames and column names are restored as indicated.
(More accurately the first row and column returned is transferred
to the row/col names).
sqlCopy as above,
but saves the output of query in table destination on
dsn destchannel. [Not yet implemented.]
sqlCopyTable
copies the structure of srctable to desttable on dsn
destchannel. This is within the limitations of the ODBC lowest
common denominator. More precise control is possible via
sqlQuery.
sqlClear deletes
the content of the table sqtable. No confirmation is requested.
sqlDrop removes the table sqtable. No confirmation
is requested.
sqlUpdate updates the table
where the rows already exist. The dataframe must contain a column
named after the row that the database regards as the optimal for
defining a row uniquely. (This is returned by
sqlColumns(..., special=TRUE)).
sqlColumns, sqlTables, and sqlPrimaryKeys return
information as data frames. Note that the column names contain
underscores and are invalid in Runless quoted. The column names are
not constant across ODBC versions so the data should be accessed by
column number. The argument special to sqlColumns
returns the columns needed to specify a row uniquely. This is intended
to form the basis of a WHERE clause for updates.
sqlGetResults returns the
last result set created by an odbc* call as a data frame.
sqlTypeInfo attempts to find the types of columns the database
supports. Not all ODBC drivers support this. Where it is supported,
it is used to decide what columns types to create when creating a new
table in the database. If the information is unavailable,
"varchar" columns are used.
A few functions, notably sqlFetch,
try to cope with the peculiar way the Excel ODBC driver handles names.
odbcConnect, odbcGetInfolibrary(RODBC)
data(USArrests)
channel <- odbcConnect("test", "", "") # userId and password
sqlSave(channel, USArrests, rownames = "State", verbose = TRUE)
options(dec=".") # this is the default decimal point
sqlQuery(channel, "select State, Murder from USArrests where rape > 30 order by Murder")
sqlFetch(channel, "USArrests", rownames = TRUE) # get the lot
sqlDrop(channel, "USArrests") # quotes are optional
odbcClose(channel)
rm(USArrests)Run the code above in your browser using DataLab