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
- Since: - 2.0.3
Returns:
-
(:second or :day)
-
def self.unit @@unit end
def self.unit=(val)
- 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:
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:
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