code: def callproc(self, name, params, param_types=None):
      
  
      if param_types:
        placeholders = [self.sql_writer.typecast(self.sql_writer.to_placeholder(), t)
                        for t in param_types]
      else:
        placeholders = [self.sql_writer.to_placeholder() for p in params]
  
      # TODO: This may be Postgres specific...
      qs = "select * from {0}({1});".format(name, ", ".join(placeholders))
      return self.execute(qs, params), params
docs: Calls a procedure.
  
      :param name: the name of the procedure
      :param params: a list or tuple of parameters to pass to the procedure.
      :param param_types: a list or tuple of type names. If given, each param will be cast via
                          sql_writers typecast method. This is useful to disambiguate procedure calls
                          when several parameters are null and therefore cause overload resoluation
                          issues.
      :return: a 2-tuple of (cursor, params)