Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在insert语句中使用Sequel SQL函数?_Sql_Ruby_Sequel - Fatal编程技术网

如何在insert语句中使用Sequel SQL函数?

如何在insert语句中使用Sequel SQL函数?,sql,ruby,sequel,Sql,Ruby,Sequel,我希望在向数据集中插入新值时使用SQL函数。但是,我一直遇到TypeError:无法将Sequel::SQL::Function转换为字符串错误。Sequel文档解释了如何使用函数进行选择,而不是插入 理想情况下,我希望避免使用DB.run,因为我是动态插入的,而原始SQL是混乱且不灵活的 这就是我想做的: INSERT INTO dataset (col1, col2, col3) VALUES ('something', 3, func(value)) 这是我在续集里看到的: x = 's

我希望在向数据集中插入新值时使用SQL函数。但是,我一直遇到TypeError:无法将Sequel::SQL::Function转换为字符串错误。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)

这可能吗?如果是这样的话,我还缺少什么?

找到了答案。创建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))"

在Sequel中,似乎有几种不同的语法调用SQL函数的方法:

我不知道续集,但我建议尝试隔离问题。对我来说,第一步是输出func_值以查看它是什么。func_值是Sequel::SQL::Function的一个实例。我想我的问题可以归结为如何将Sequel::SQL::Function实例传递到Sequel insert方法中。我最终使用DB.run为func_value变量提取适当的值,并且仍然使用DB[:dataset]。插入语法以获得灵活性:DB.runselect func{value};如果还有其他答案,我很想看看!我需要这样做,因为我正试图取消释放一个UUID,我正试图使用它作为PK。从这篇文章中得到了这个想法: