- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个返回 varbinary 输出参数的存储过程。我想从 R 调用它并捕获返回变量。我试过:
qq <- "declare @mm varbinary(max); exec spTrain_df_to_op @mm_outer = @mm output; select @mm as model;"
conStr <- "Driver={SQL Server};Server=.;Database=airline_new;Trusted_Connection=TRUE;"
dbhandle <- odbcDriverConnect(conStr, rows_at_time = 1)
result <- sqlQuery(dbhandle, qq)
这失败了,结果以 character(0) 出现。可能是 RODBC 不想执行本质上是一系列查询的内容。我将如何解决这个问题?
谢谢!
存储过程如下:
ALTER PROCEDURE [dbo].[spTrain_df_to_op]
@mm_outer varbinary(max) output
AS
BEGIN TRY
exec sp_execute_external_script
@language = N'R',
@script = N'
func <- function() {
in_df[,"DayOfWeek"] <- factor(in_df[,"DayOfWeek"], levels=as.character(1:7))
# The model formula
formula <- ArrDelay ~ CRSDepTime + DayOfWeek + CRSDepHour:DayOfWeek
# Train the model
rxSetComputeContext("local")
mm <- rxLinMod(formula, data=in_df, transformFunc=NULL, transformVars=NULL)
mm <<- serialize(mm, connection=NULL)
}
result = func()
',
@input_data_1 = N'select top 10000 ArrDelay,CRSDepTime,DayOfWeek,CRSDepHour from cleanData',
@input_data_1_name = N'in_df',
@params = N'@mm varbinary(max) output',
@mm = @mm_outer output
END TRY
BEGIN CATCH
THROW;
END CATCH;
对于踢球,我尝试了以下方法:
qq = "declare @mm varbinary(max); select 2 as hello; select 1 as model"
conStr <- "Driver={SQL Server};Server=.;Database=airline_new;Trusted_Connection=TRUE;"
dbhandle <- odbcDriverConnect(conStr, rows_at_time = 1)
result <- sqlQuery(dbhandle, qq)
这只返回第一个查询的结果:
hello
1 2
我还尝试将查询设置为
qq = paste0("SET NOCOUNT ON; declare @mm varbinary(max); ",
"exec spTrain_df_to_op @mm_outer = @mm output; ",
"SET NOCOUNT OFF; select @mm as model;")
那仍然产生了字符(0)。
从查询中创建存储过程不是一种选择。
最佳答案
诚然,我没有像在您的用例中那样对 PL/SQL 进行过尝试,但我认为它应该可以工作,如果不能的话,希望它对其他人运行存储在单个脚本中的多个查询有用。
您应该能够通过首先将脚本拆分为单独的查询来完成此操作。如果您使用分号作为分隔符(无论如何设置了多少个查询,以及您的第二次尝试是如何构造的),您可以将查询拆分为一个查询向量并通过循环单独运行每个查询。如果某些查询有您希望之后访问的结果,您可以返回它们并将它们存储在列表中。
library(RODBC)
# an example SQL Script containing multiple queries, seperated by semi-colon
example_script <-
"select sysdate from dual;
commit;
select sysdate from dual;"
# split the string into a character vector of queries to run
split_queries <- strsplit(example_script, ";",)[[1]]
#prepeare a list to store results
list_of_results <- list()
ch <- odbcConnect("XX",uid="XX", pwd="XX")
# loop through and run the queries, storing results (if any) in the list
for (i in 1:length(split_queries)) {
list_of_results[[i]] <- sqlQuery(ch,
split_queries[i],
errors = FALSE)
Sys.sleep(2)
}
odbcClose(ch)
# show list of results, of course these elements could be anything from strings to data.frames
list_of_results
[[1]]
SYSDATE
1 2018-03-28 17:15:26
[[2]]
[1] -2
[[3]]
SYSDATE
1 2018-03-28 17:15:30
我已提交“提交”; in 来说明一个命令不有结果只会在结果列表中返回一个负整数位置。
我在 sqlQuery 中包含了 errors = FALSE,因为这将允许像这样的命令当表不存在时“删除表”不停止循环。
我的大型脚本有多个drop table create table 查询对。这种方法让我可以将整个脚本一次性放入 R 中并一次性运行。通常我只是在最终查询的结果之后,所以我不会在我去的时候将东西存储在列表中,而只是有一个输出变量,它在循环运行时被覆盖,直到最终的 select 语句将结果转储到变量。
关于sql - RODBC:执行包含多个语句的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38754927/
简单的 R 脚本 library(RODBC) odbChannel Rscript ./RODBC_SIMPLE_TEST.r Error in odbcQuery(channel, query,
我设置了一个 ODBC 连接到 Netezza(SQL 数据库)。连接很好。但是,R 默认只拉出 256 行,并且限制了它可以拉出的行数。 如果我在 Netezza 中运行查询,它将返回总行数 (30
我正在使用提供的 ODBC 驱动程序和 RODBC 测试新的数据库系统。包裹。 我遇到的问题是,仅在几次查询之后(都在 2~3 分钟或更短的时间内),R 不再将连接识别为有效。 具体来说,它只是一个C
在数据库中,我存储了包含特殊字符(例如“§”)的字符串。使用命令 查询() 从包 RODBC“§”被翻译成“?”。对于法语单词中的“'”等字符也是如此。 当然我不能替换每一个“?”通过查询后的特殊字符
我在使用RODBC的sqlSave创建表时遇到了麻烦(或更准确地说,是将数据写入到创建的表中)。 这与现有的sqlSave问题/答案不同,因为 他们遇到的问题是不同的,我可以创建表,而他们不能,而 我
关于此 R 代码的问题: library(RODBC) ch <- tryCatch(odbcConnect("RTEST"), warning=function(w){print("FAIL!
我正在尝试使用 R/RODBC 对 MSSQL 2008 R2 数据库的结构进行编目。我已经设置了一个 DSN,通过 R 连接并使用了 sqlTables()命令,但这只是获取“系统数据库”信息。 l
我有一个返回 varbinary 输出参数的存储过程。我想从 R 调用它并捕获返回变量。我试过: qq <- "declare @mm varbinary(max); exec spTrain_df_
我有一个返回 varbinary 输出参数的存储过程。我想从 R 调用它并捕获返回变量。我试过: qq <- "declare @mm varbinary(max); exec spTrain_df_
我有一个关于使用 sqlSave 的问题。 R 如何将数据框中的 RODBC 数据映射到数据库表列? 如果我有一个包含 X 和 Y 列的表以及一个包含 X 和 Y 列的数据框,RODBC 会将 X 放
这是我第一次尝试在本地 MySQL 数据库和 R 之间来回传递数据。也就是说,我在数据库中创建了一个表并想将数据插入其中。目前,它是一个空白表(使用 MySQL 查询浏览器创建)并且有一个 PK 集。
我正在使用 RODBC 从 MySql Server 获取数据到 R。 所以在数据库的一列中是一个字符向量 SELECT MAX(CHAR_LENGTH(column)) FROM reqtable;
我正在使用 RODBC 包从 R 连接到 Oracle 数据库,但我没有成功合并来自不同数据库的表而没有“下载”这些表(我不想下载它们,因为它们太大了!)。我想使用类似的东西: DBa=odbcCon
我正在尝试将数据从 Access 数据库导入 R。我想导入某些专业的 CIP 代码,其中可能包含前导零。 RODBC 正在将 CIP 代码转换为数字值,即使它在 Access 中被定义为文本。任何人都
相关 https://stackoverflow.com/a/33284035/3358272 ,我发现从 SQL Server (2014) 中提取数据的行为不一致。 library(RODBC)
我想了解 RODBC 如何确定新创建的 (Access) 表的列类型? sqlSave 的 R 文档非常神秘:“类型是通过咨询参数 varTypes 和 typeInfo 来选择的”。并且没有这个论点
我的数据库表大致如下所示: +-----+-------+--------------------+-----------+----------+ | ID1 | ID2 | FilePath1
所以这很奇怪。如果结果集足够大,RODBC 似乎会删除 DateTime SQL 列的时间部分。 (查询是针对 SQL Server 2012 机器运行的,是的,当我在 SQL Server 端运行它
我正在尝试使用R中的SQLite连接RODBC数据库。RODBC可以连接到数据库,但不能使用sqlTables获取数据库中的表列表,该列表返回"0 rows"。该数据库有20个表。 系统:R 3.1.
我想使用 R 脚本将数据框输入到数据库中的现有表中,并且我希望数据库中的表具有顺序主键。我的问题是 RODBC 似乎不允许主键约束。 这是创建我想要的表的 SQL: CREATE TABLE [dbo
我是一名优秀的程序员,十分优秀!