2017-03-17 7 views
0

複数のCSVファイルを作成するための関数を書いています。PostgreSQL関数がCSVファイルを生成する

DECLARE r RECORD; 
DECLARE ra RECORD; 
DECLARE ro RECORD; 

BEGIN 

DROP TABLE IF EXISTS tab1; 
DROP TABLE IF EXISTS tab2; 
DROP TABLE IF EXISTS tab3; 

EXECUTE 'CREATE TABLE tab1 AS SELECT DISTINCT num FROM analysis'; 

FOR r IN EXECUTE 'SELECT num AS num FROM tab1' 
LOOP 
    EXECUTE 'CREATE TABLE tab2 AS SELECT id FROM analysis WHERE num_vista = r.num'; 
    FOR ra IN SELECT id FROM tab2 
    LOOP 
     EXECUTE 'CREATE TABLE tab3 AS SELECT DISTINCT oid FROM area WHERE analysis_id = ra.id'; 
     FOR ro IN SELECT oid FROM tab3 
     LOOP 
      EXECUTE 'COPY 
      (
       SELECT created_at, result, updated_at FROM area 
       WHERE oid = ro.oid 
      ) TO "C:/Program Files/PostgreSQL/9.5/data/Num$rOid$ro.csv" WITH CSV HEADER;'; 
     END LOOP; 

    END LOOP; 

END LOOP; 
END; 

しかし、私はこのエラーを持っている:テーブルR用FROM 要素が

LINE 1: ...tab2 AS SELECT id FROM analysiy WHERE num_vista = r.num 

が欠落していますが、私はどのように行うことができます知っていますか? ありがとうございます!

+0

完全なSQLを提供してください –

答えて

1

"text"クエリーステートメントはクエリー式の外に値を取り込めません。これらのクエリーの中毒性の値をテキストとして生成する必要があります。

E r RECORD; 
DECLARE ra RECORD; 
DECLARE ro RECORD; 

BEGIN 

DROP TABLE IF EXISTS tab1; 
DROP TABLE IF EXISTS tab2; 
DROP TABLE IF EXISTS tab3; 

EXECUTE 'CREATE TABLE tab1 AS SELECT DISTINCT num FROM analysis'; 

FOR r IN EXECUTE 'SELECT num AS num FROM tab1' 
LOOP 
    EXECUTE 'CREATE TABLE tab2 AS SELECT id FROM analysis WHERE num_vista = '||r.num::text; 
    FOR ra IN SELECT id FROM tab2 
    LOOP 
     EXECUTE 'CREATE TABLE tab3 AS SELECT DISTINCT oid FROM area WHERE analysis_id = '||ra.id::text; 
     FOR ro IN SELECT oid FROM tab3 
     LOOP 
      EXECUTE 'COPY 
      (
       SELECT created_at, result, updated_at FROM area 
       WHERE oid = '||ro.oid::text||' 
      ) TO "C:/Program Files/PostgreSQL/9.5/data/Num$rOid$ro.csv" WITH CSV HEADER;'; 
     END LOOP; 

    END LOOP; 

END LOOP; 
END; 
+0

ありがとう!できます!どうもありがとうございました! –