class OCI8::BindType::IntervalDS


.strftime(‘%Y-%m-%d %H:%M:%S’) # => 1969-11-19 06:54:35
cursor.exec
cursor.bind_param(:interval, 10492615.0, :interval_ds)
cursor.bind_param(:ts2, DateTime.parse(‘1969-07-20 20:17:40 00:00’))
cursor.bind_param(:ts1, nil, DateTime)
EOS
END;
:ts1 := :ts2 + :interval;
BEGIN
cursor = conn.parse(<<-EOS)
# input bind variable<br><br>cursor.close<br>cursor # => 10492615.0 seconds
cursor.exec
cursor.bind_param(:ts2, DateTime.parse(‘1969-07-20 20:17:40 00:00’))
cursor.bind_param(:ts1, DateTime.parse(‘1969-11-19 06:54:35 00:00’))
cursor.bind_param(:interval, nil, :interval_ds)
EOS
END;
:interval := (:ts1 - :ts2) DAY TO SECOND(9);
BEGIN
cursor = conn.parse(<<-EOS)
# output bind variable
implicitly. It must be bound explicitly by OCI8::Cursor#bind_param.
You cannot bind a bind variable as INTERVAL DAY TO SECOND
== How to bind INTERVAL DAY TO SECOND
version is prior to 2.0.3.
OCI8::BindType::IntervalDS.unit is :day or the ruby-oci8
Note that it is the number days as a Rational if
the number of seconds between two typestamps as a Float.
INTERVAL DAY TO SECOND. The retrieved value is
This is a helper class to select or bind Oracle data type
(new in 2.0)
++
OCI8::BindType::IntervalDS

def self.unit

Other tags:
    Since: - 2.0.3

Returns:
  • (:second or :day) -
def self.unit
  @@unit
end

def self.unit=(val)

Other tags:
    Since: - 2.0.3

Parameters:
  • val (:second or :day) --
def self.unit=(val)
  case val
  when :second, :day
    @@unit = val
  else
    raise 'unit should be :second or :day'
  end
end

def get() # :nodoc:

:nodoc:
def get() # :nodoc:
  val = super()
  return nil if val.nil?
  day, hour, minute, sec, fsec = val
  if @@unit == :second
    fsec = fsec / 1000000000.0
    day * 86400 + hour * 3600 + minute * 60 + sec + fsec
  else
    day + (hour * @@hour) + (minute * @@minute) + (sec * @@sec) + (fsec * @@fsec)
  end
end

def set(val) # :nodoc:

:nodoc:
def set(val) # :nodoc:
  unless val.nil?
    if val < 0
      is_minus = true
      val = -val
    else
      is_minus = false
    end
    if @@unit == :second
      day, val = val.divmod 86400
      hour, val = val.divmod 3600
      minute, val = val.divmod 60
      sec, val = val.divmod 1
    else
      day, val = val.divmod 1
      hour, val = (val * 24).divmod 1
      minute, val = (val * 60).divmod 1
      sec, val = (val * 60).divmod 1
    end
    fsec, val = (val * 1000000000).divmod 1
    if is_minus
      day = - day
      hour = - hour
      minute = - minute
      sec = - sec
      fsec = - fsec
    end
    val = [day, hour, minute, sec, fsec]
  end
  super(val)
end