2017-02-04 2 views
1

У меня есть следующая таблица:Looped CopyTo Запрос

writing_agent_number|agent_name  |individual_sub_name 
-------------------- ----------------- -------------------- 
300699    |J Todd Foster |Haash,matthew 
300699    |J Todd Foster |Lea, Monique 
300693    |Loran J Marmes |Jensen, Jeffrey A 
300842    |Mattthew Atkinson|Castano, Karissa 
300927    |Richard Melberg |Burk, Barbara 
300694    |Ryan Moran  |Moran, Maura C 
300697    |Scott W Lange, Jr|Stewart, Allisia 

Моя цель: Я хотел бы создать отдельный файл CSV с именем «agent_name [временная метка] .csv.» Где agent_name это имя из агент для КАЖДОГО отдельного агента в столбце «agent_name».

Ниже то, что у меня есть, (пожалуйста, простите меня, я новичок в SQL) Я предполагаю, что я пропускаю переменную, которая вводит имя агента, но я не уверен, куда идти отсюда. Любая помощь с благодарностью:

CREATE OR REPLACE FUNCTION get_commissions() 
$func$ 
BEGIN LOOP 
    EXECUTE ' 

COPY 
(SELECT 
writing_agent_number AS "Writing Number" 
,agent_name AS "Agent Name" 
,indiv_sub_name AS "Client Name" 

FROM rdf_nwh_ind 
TO '/Users/ryanmoran/Downloads/agent_name.csv' 
WITH CSV Delimiter ',' Header; 


END LOOP;' 
END 
$func$ LANGUAGE plpgsql; 

ответ

0
CREATE OR REPLACE FUNCTION get_commissions() RETURNS bool AS $func$ 
DECLARE 
    v_agent_name text; 
BEGIN 
    FOR v_agent_name IN SELECT DISTINCT agent_name FROM rdf_nwh_ind 
    LOOP 
     EXECUTE format($$COPY (
      SELECT writing_agent_number AS "Writing Number", 
        agent_name AS "Agent Name", 
        indiv_sub_name AS "Client Name" 
      FROM rdf_nwh_ind 
      WHERE agent_name = %s 
      ) 
      TO '/Users/Shared/%s.%s.csv' 
      WITH CSV Delimiter ',' Header$$, 
       quote_nullable(v_agent_name), 
       replace(v_agent_name, ' ', '_'), 
       to_char(now(), 'YYYY-DD-MM')); 
    END LOOP; 
    RETURN true; 
END; 
$func$ LANGUAGE plpgsql;