Advertisement
Guest User

Untitled

a guest
Nov 20th, 2016
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.50 KB | None | 0 0
  1. library(ROracle)
  2.  
  3. Sys.setenv(TZ='America/Chicago')
  4. Sys.setenv(ORA_SDTZ='America/Chicago')
  5.  
  6. #=============================================
  7. # Upload dataframe as Oracle database table |
  8. #=============================================
  9. dfToOracle <- function(dataframe,
  10. tablename,
  11. database,
  12. schema,
  13. password,
  14. overwrite=TRUE,
  15. append=FALSE) {
  16.  
  17. database <- trimws(database)
  18. schema <- trimws(schema)
  19. password <- trimws(password)
  20. tablename <- trimws(tablename)
  21. oracleDriver <- dbDriver("Oracle")
  22. conn <- dbConnect(
  23. oracleDriver,
  24. username=schema,
  25. password=password,
  26. dbname=database,
  27. bulk_read=1000L,
  28. bulk_write=1000L,
  29. stmt_cache=0L,
  30. external_credentials=FALSE,
  31. sysdba=FALSE)
  32.  
  33. ### check whether `tablename` exists in `schema` =>
  34. if (dbExistsTable(conn, tablename)) {
  35. if (append==FALSE) {
  36. if (overwrite==TRUE) {
  37. dbRemoveTable(conn, tablename, purge=TRUE)
  38. } else {
  39. stop(paste("`",tablename, "` already exists in ",
  40. schema, "@", database, ".", sep=""))
  41. }
  42. }
  43. }
  44.  
  45. ### write dataframe to tablename =>
  46. returnstatus=dbWriteTable(
  47. conn=conn,
  48. name=tablename,
  49. value=dataframe,
  50. row.names=FALSE,
  51. ora.number=TRUE,
  52. date=TRUE,
  53. append=append)
  54.  
  55. if (returnstatus==TRUE) {
  56. print(paste("`", tablename, "` successfully loaded to ",
  57. schema, "@", database, "...", sep=""),
  58. quote=FALSE)
  59. } else {
  60. print(paste("An error was encountered attempting to load `",
  61. tablename, "` to ", schema, "@", database, ".", sep=""),
  62. quote=FALSE)
  63.  
  64. }
  65. dbDisconnect(conn)
  66. return(returnstatus)
  67. }
  68.  
  69.  
  70. #=====================================================
  71. # Capture Oracle table data and return as data.frame |
  72. #=====================================================
  73. dfFromOracle <- function(database,
  74. schema,
  75. password,
  76. SQLstr) {
  77.  
  78. database <- trimws(database)
  79. schema <- trimws(schema)
  80. password <- trimws(password)
  81. SQLstr <- trimws(SQLstr)
  82. oracleDriver <- dbDriver("Oracle")
  83. conn <- dbConnect(
  84. oracleDriver,
  85. username=schema,
  86. password=password,
  87. dbname=database,
  88. bulk_read=1000L,
  89. bulk_write=1000L,
  90. stmt_cache=0L,
  91. external_credentials=FALSE,
  92. sysdba=FALSE)
  93.  
  94. dataframe <- dbGetQuery(conn, SQLstr)
  95. dbDisconnect(conn)
  96. return(dataframe)
  97. }
  98.  
  99.  
  100. #=====================================================================
  101. # Provide `tablename` instead of SQLstr to capture Oracle table data |
  102. #=====================================================================
  103. dfCaptureTable <- function(db
  104. schema='CONNECTANALYSIS',
  105. password='n518dytzb',
  106. tablename) {
  107.  
  108. database <- trimws(db)
  109. schema <- trimws(schema)
  110. password <- trimws(password)
  111. tablename <- trimws(tablename)
  112. oracleDriver <- dbDriver("Oracle")
  113. conn <- dbConnect(
  114. oracleDriver,
  115. username=schema,
  116. password=password,
  117. dbname=database,
  118. bulk_read=1000L,
  119. bulk_write=1000L,
  120. stmt_cache=0L,
  121. external_credentials=FALSE,
  122. sysdba=FALSE)
  123.  
  124. if (!dbExistsTable(conn, tablename)) {
  125. dbDisconnect(conn)
  126. stop(paste("Table `", tablename, "` does not exist in ",
  127. schema, "@", database, ".", sep=""))
  128. }
  129. else {
  130. dataframe <- as.data.frame(dbReadTable(conn,
  131. tablename,
  132. schema=schema,
  133. row.names=NULL))
  134. dbDisconnect(conn)
  135. }
  136. return(dataframe)
  137. }
  138.  
  139.  
  140. #==========================================================
  141. # Same as `dfCaptureTable', but retrieves multiple tables |
  142. #==========================================================
  143. dfCaptureTables <- function(db,
  144. schema,
  145. password,
  146. tablenames) {
  147.  
  148. database <- trimws(db)
  149. schema <- trimws(schema)
  150. password <- trimws(password)
  151. tablenames <- unlist(tablenames)
  152. oracleDriver <- dbDriver("Oracle")
  153. results <- list()
  154. conn <- dbConnect(
  155. oracleDriver,
  156. username=schema,
  157. password=password,
  158. dbname=database,
  159. bulk_read=1000L,
  160. bulk_write=1000L,
  161. stmt_cache=0L,
  162. external_credentials=FALSE,
  163. sysdba=FALSE)
  164.  
  165. for (i in 1:length(tablenames)) {
  166.  
  167. tbl <- trimws(tablenames[i])
  168.  
  169. if (!dbExistsTable(conn, tbl)) {
  170. print(paste("Table `", tbl, "` does not exist in ",
  171. schema, "@", database, ".", sep=""), quote=FALSE)
  172. next
  173.  
  174. } else {
  175. dataframe <- dbReadTable(conn,
  176. tbl,
  177. schema,
  178. row.names=NULL))
  179. results[[i]] <- dataframe
  180. }
  181. }
  182. dbDisconnect(conn)
  183. return(results)
  184. }
  185.  
  186.  
  187. #==================================================================
  188. # Closure version of dfFromOracle => Takes a connection object as |
  189. # opposed to a separate db, schema and password arguments. |
  190. # |
  191. # First, pass `conn` to `dfCaptureTableClosure': |
  192. # |
  193. # dfCaptureTable <- dfCaptureTableClosure(conn) |
  194. # |
  195. # Next, pass SQLstr to `dfCaptureTable': |
  196. # |
  197. # df <- dfCaptureTable(SQLstr="SELECT * FROM TABLE") |
  198. # |
  199. #==================================================================
  200. dfCaptureTableClosure <- function(connection, killConnection=FALSE) {
  201. conn <- connection
  202. function(SQLstr) {
  203. dataframe <- as.data.frame(dbGetQuery(conn, SQLstr))
  204. if (killConnection) dbDisconnect(conn)
  205. return(dataframe)
  206. }
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement