2015-05-22 35 views

回答

3

从汉纳斯的MonetDB.R作者 -

你可以只是在你的数据库中创建它。如果它已经存在,这将失败,但你可以捕获该错误。所以

dbSendQuery(con, "create function div_noerror(l double, r double) returns double external name calc.div_noerror”) should work. 

这里有一个稍长的使用例子:

# example of division 
dbGetQuery(con , "SELECT 1/2 AS a") 

# example of division by zero, which causes an error 
dbGetQuery(con , "SELECT 1/0 AS a") 

# load the `div_noerror` function through a system call 
dbSendQuery(con , "CREATE FUNCTION div_noerror(l DOUBLE, r DOUBLE) RETURNS DOUBLE EXTERNAL NAME calc.div_noerror") 

# use the div_noerror function instead of the `/` operator 
dbGetQuery(con , "SELECT div_noerror(1 , 2) AS a") 

# division by zero now returns a missing instead of crashing the entire query 
dbGetQuery(con , "SELECT div_noerror(1 , 0) AS a") 
相关问题