2017-03-17 83 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为缺少

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

你知不知道我该怎么办? 在此先感谢!

+0

提供完整的sql请 –

回答

1

执行“文本”查询语句不能访问查询表达式以外的值,您必须生成这些查询的成瘾值作为文本...。

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

谢谢!有用!非常感谢你! –