title: Sending one record from cursor to another function Postgres
body: <p>FYI: I am completely new to using cursors...
  So I have one function that is a cursor:</p>
  
  <pre><code>CREATE FUNCTION get_all_product_promos(refcursor, cursor_object_id integer) RETURNS refcursor AS '
  BEGIN
      OPEN $1 FOR SELECT *
                  FROM promos prom1
                  JOIN promo_objects ON (prom1.promo_id = promo_objects.promotion_id)
                  WHERE prom1.active = true AND now() BETWEEN prom1.start_date AND prom1.end_date
                      AND promo_objects.object_id = cursor_object_id
                  UNION 
                  SELECT prom2.promo_id 
                  FROM promos prom2 
                  JOIN promo_buy_objects ON (prom2.promo_id = 
                      promo_buy_objects.promo_id)
                  LEFT JOIN promo_get_objects ON prom2.promo_id = promo_get_objects.promo_id
                  WHERE (prom2.buy_quantity IS NOT NULL OR prom2.buy_quantity &gt; 0) AND
                      prom2.active = true AND now() BETWEEN prom2.start_date AND  
                      prom2.end_date AND promo_buy_objects.object_id = cursor_object_id;
      RETURN $1;
  END;
  ' LANGUAGE plpgsql;
  </code></pre>
  
  <p>SO then in another function I call it and need to process it:</p>
  
  <pre><code>...
  --Get the promotions from the cursor
          SELECT get_all_product_promos('promo_cursor', this_object_id)
          updated := FALSE;
          IF FOUND THEN
          --Then loop through your results
              LOOP
                  FETCH promo_cursor into this_promotion
                  --Preform comparison logic -this is necessary as this logic is used in other contexts from other functions
                  SELECT * INTO best_promo_results FROM get_best_product_promos(this_promotion, this_object_id, get_free_promotion, get_free_promotion_value, current_promotion_value, current_promotion);
  ...
  </code></pre>
  
  <p>SO the idea here is to select from the cursor, loop using fetch (next is assumed correct?) and put the record fetched into this_promotion. Then send the record in this_promotion to another function. I can't figure out what to declare the type of this_promotion in get_best_product_promos. Here is what I have:</p>
  
  <pre><code>CREATE OR REPLACE FUNCTION get_best_product_promos(this_promotion record, this_object_id integer, get_free_promotion integer, get_free_promotion_value numeric(10,2), current_promotion_value numeric(10,2), current_promotion integer)
    RETURNS...
  </code></pre>
  
  <p>It tells me: ERROR:  plpgsql functions cannot take type record</p>
  
  <p>OK first I tried: </p>
  
  <pre><code>CREATE OR REPLACE FUNCTION get_best_product_promos(this_promotion get_all_product_promos, this_object_id integer, get_free_promotion integer, get_free_promotion_value numeric(10,2), current_promotion_value numeric(10,2), current_promotion integer)
    RETURNS...
  </code></pre>
  
  <p>Because I saw some syntax in the Postgres docs showed a function being created w/ a input parameter that had a type 'tablename' this works, but it has to be a tablename not a function :( I know I am so close, I was told to use cursors to pass records around. So I studied up. Please help.</p>