2

在将新值插入数据集时,我想使用 SQL 函数。但是,我不断收到TypeError: can't convert Sequel::SQL::Function into String错误。Sequel 文档解释了如何使用函数进行选择,而不是插入。

理想情况下,我想避免DB.run,因为我是动态插入的,并且原始 SQL 混乱且不灵活。

这就是我想要做的:

INSERT INTO dataset (col1, col2, col3) VALUES ('something', 3, func(value))

这就是我在续集中所拥有的:

x = 'something'
y = 3
func_value = Sequel.function(:func, value)
DB[:dataset].insert (:col1 => x, :col2 => y, :col3 => func_value)

这可能吗?如果是这样,我错过了什么?

4

2 回答 2

0

弄清楚了。创建一个 Sequel::function 对象,然后将其设为哈希值。

irb(main):028:0> tbl
=> #<Sequel::MySQL::Dataset: "SELECT * FROM `foo`.`bar`">
irb(main):029:0> uhex = Sequel.function(:unhex,7)
=> #<Sequel::SQL::Function @args=>[7], @f=>:unhex>
irb(main):030:0>  tbl.insert_sql( {:field_name => uhex })
=> "INSERT INTO `foo`.`bar` (`field_name`) VALUES (unhex(7))"
于 2013-04-29T18:46:17.933 回答
0

看起来在 Sequel 中调用 SQL 函数有几种不同的语法方式:http: //sequel.rubyforge.org/rdoc/files/doc/dataset_filtering_rdoc.html

于 2013-07-23T15:11:22.737 回答