【问题标题】:Is there a nvl() function in Ruby or do I have to write it myself?Ruby 中有 nvl() 函数还是我必须自己编写?
【发布时间】:2010-05-12 17:33:34
【问题描述】:

我想在 Ruby 中使用相当于 Oracle 的 nvl() 函数。有内置函数还是我必须自己写一个?

编辑:

我正在用它来重写一些 sql 到 ruby​​:

INSERT INTO my_table (id, val)
VALUES (1, nvl(my_variable,'DEFAULT'));

变成

plsql.my_table.insert {:id => 1, :val => ???my_variable???}

【问题讨论】:

  • 只是为了我们这里的非 Oracle 用户:nvl() 做什么?嗯,这很容易用谷歌搜索,所以更重要的问题是:你需要它做什么?

标签: ruby oracle


【解决方案1】:

你可以使用Conditional assignment

x = find_something() #=>nil
x ||= "default"      #=>"default" : value of x will be replaced with "default", but only if x is nil or false
x ||= "other"        #=>"default" : value of x is not replaced if it already is other than nil or false

运算符||= 是表达式的简写形式

x = x || "default"

一些测试

irb(main):001:0> x=nil
=> nil
irb(main):003:0* x||=1
=> 1
irb(main):006:0> x=false
=> false
irb(main):008:0> x||=1
=> 1
irb(main):011:0* x||=2
=> 1
irb(main):012:0> x
=> 1

是的,如果您不希望 false 匹配,您可以使用 if x.nil?,就像 Nick Lewis 提到的那样

irb(main):024:0> x=nil
=> nil
irb(main):026:0* x = 1 if x.nil?
=> 1

编辑

plsql.my_table.insert {:id => 1, :val => ???????}

应该是

plsql.my_table.insert {:id => 1, :val => x || 'DEFAULT' }

其中 x 是要在 :val 中设置的变量名,当 x 为 nil 或 false 时,'DEFAULT' 将被插入到 db 中

如果您只想将 nil 设为 'DEFAULT',请使用以下方式

{:id => 1, :val => ('DEFAULT' if x.nil?) }

【讨论】:

  • 如果 x 是一个非 nil 的 false 值,即 false,那将无法正常工作。
猜你喜欢
  • 1970-01-01
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
相关资源
最近更新 更多