微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

参数和NULL

我使用RPostgres和RPostgresql将NULL作为INSERT参数查询传递时遇到问题:

在Postgresql中:

create table foo (ival int,tval text,bval bytea);

在R:

这有效:

res <- dbSendQuery(con,"INSERT INTO foo VALUES($1,$2,$3)",params=list(ival=1,tval= 'not quite null',bval=charToRaw('asdf')
                               )
                    )

但这会引发错误

res <- dbSendQuery(con,params=list(ival=NULL,bval=charToRaw('asdf')
                               )
                   )

使用RPostgres,错误消息是:

Error: expecting a string

在RPostgresql下,错误是:

06003

替换NA对我来说没问题,但它不是一种解决办法 – 文字’NA’被写入数据库.

使用例如整数(0)给出相同的“期望字符串”消息.

解决方法

这里有一个选项来解决不知道如何在R中明确表示Postgressql pacakge能够成功转换的NULL值的问题,就是不要在数据库中指定要在其值中为NULL的列.

所以在你的例子中你可以使用这个:

res <- dbSendQuery(con,"INSERT INTO foo (col2,col3) VALUES($1,$2)",params=list(tval = 'not quite null',bval = charToRaw('asdf')
                          )
                  )

当你想让col1有一个NULL值.这当然假设表中的col1可以为空,这可能不是这种情况.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐