class OCI8::Object::Base

def initialize(*args)

def initialize(*args)
  @attributes = {}
  if args[0].is_a? OCI8
    @con = args.shift
  else
    @con = @@default_connection
  end
  return if args.empty?
  raise "no connection is specified." if @con.nil?
  # setup a TDO object.
  tdo = @con.get_tdo_by_class(self.class)
  # call constructor.
  bind_arg_helper = BindArgumentHelper.new(*args)
  sql = <<EOS
f := #{tdo.typename}(#{bind_arg_helper.arg_str});
  csr = @con.parse_internal(sql)
  begin
    csr.bind_param(:self, nil, :named_type_internal, tdo)
    bind_arg_helper.exec(@con, csr)
    @attributes = csr[:self].attributes
  ensure
    csr.close
  end
end