title: Postgres error: a column definition list is only allowed for functions returning "record"
body: <pre><code>public class DimensionStoneDaoHibernate extends HibernateDaoSupport implements DimensionStoneDao 
        {
  
      public Connection con = null;
      int i=0;
  
      public void setCon(Connection con) {
          this.con = getSession().connection(); 
      }
  
      public Connection getCon() {        
  
          setCon(con);        
          return con;
      } 
          public List getMineralByApplicationId(String appId) {
              List&lt;String&gt; mineral = new ArrayList&lt;String&gt;();
  
          PreparedStatement query =getCon().prepareStatement("select * from  multiple_mineral_report(?) as types(val1 varchar)",ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);      
  
                  query.setInt(1, Integer.parseInt(appId));               
                      ResultSet rs=query.executeQuery();
  
                      String value = new String();
                      i = 0;
                      while(rs.next()){               
                          value = rs.getString(1);
                          mineral.add(value);
                      }
  
          } 
  
  }
  </code></pre>
  
  <p>Above the SQL function <code>multiple_mineral_report(?)</code> returns string. When the above code is executed the following exception is thrown:</p>
  
  <blockquote>
    <p>org.postgresql.util.PSQLException: ERROR: a column definition list is only allowed for functions returning "record"</p>
  </blockquote>
  
  <pre><code>    CREATE OR REPLACE FUNCTION multiple_mineral_report(b integer)
    RETURNS character varying AS
  $BODY$
  declare
  k varchar := '';    
  sql_res record;
  begin
   for sql_res in execute 'select  mineral_name from application_mineral as am inner join mineral as m on(am.mineral=m.mineral_id) where am.application_id = '||$1||'' loop
      k = k || sql_res.mineral_name || ', ';
   end loop;
   return k;
  end;
  $BODY$
    LANGUAGE plpgsql VOLATILE
    COST 100;
  ALTER FUNCTION multiple_mineral_report(integer) OWNER TO postgres;
  </code></pre>