2014-02-17 5 views
0

저장 프로 시저를 사용하여 데이터베이스에 CSV를 복사하고 싶습니다. 내 기능은 다음과 같다.저장 프로 시저를 사용하여 postgresql에 CSV 저장

CREATE FUNCTION gis_portal.copycsv(IN path text) RETURNS void AS 
'COPY gis_portal.temp_excel FROM path WITH DELIMITER' 
LANGUAGE sql VOLATILE LEAKPROOF; 

쿼리 매개 변수 경로

COPY gis_portal.temp_excel FROM path WITH DELIMITER ',' CSV HEADER 

입니다.

함수를 생성하는 동안 경로 근처 구문 오류로 오류가 나타납니다.

도와주세요.

+0

오류의 전체 * 정확한 텍스트 *를 항상 표시하십시오. –

답변

1
'COPY gis_portal.temp_excel FROM path WITH DELIMITER' 
              ^^^^^^^^^^ 

구분 기호는 무엇입니까? 해당 키워드를 사용하려면 하나를 지정해야합니다.

시도 :

CREATE FUNCTION gis_portal.copycsv(IN path text) RETURNS void AS $$ 
COPY gis_portal.temp_excel FROM path WITH DELIMITER ',' 
$$ LANGUAGE sql; 

이든 구분 당신이 원하는.

또한 SQL 함수에서 식별자를 사용할 수 없으므로 $ 1처럼 위치 매개 변수를 사용해야합니다. 하지만 COPY은 plannable 문이 아니기 때문에 매개 변수를 사용할 수 없습니다. 당신은 PL/pgSQL의를 사용해야하고 EXECUTE 그것을 동적 SQL 실행 : 그것은 이제 SQL 문자열이기 때문에 구분 기호 주위에

CREATE FUNCTION gis_portal.copycsv(IN path text) RETURNS void AS $$ 
BEGIN 
    EXECUTE format('COPY gis_portal.temp_excel FROM %L WITH DELIMITER '',''', path); 
END; 
$$ LANGUAGE plpgsql; 

참고 두 배로 따옴표를.

+0

오류가 발생했습니다. 오류 : "경로"또는 근처에서 구문 오류가 발생했습니다. SQL 상태 : 42601 문자 : 101 –

+0

@Santhucool ah, 예. SQL 함수에서 식별자를 사용할 수 없으면 $ 1과 같은 위치 매개 변수를 사용해야합니다. –

관련 문제