2017-05-23 6 views
-2

와 테이블을 작성 내가 같은 테이블을 생성하기위한 쿼리를 저장 기능 PostgreSQL의

DROP TABLE IF EXISTS BAJUL; 
CREATE TABLE BAJUL AS (
SELECT dt_trx, row_number() OVER (ORDER BY dt_trx DESC) AS row_number 
FROM stock_trx_idx 
WHERE dt_trx BETWEEN '2017-01-01' AND '2017-02-28' 
GROUP BY 1 
ORDER BY 1 DESC); 

아래 어떻게 PostgreSQL을에서 저장 기능을 위의 표를 만들 수? 나는 아래 스크립트

CREATE OR REPLACE FUNCTION my_function (dt1 DATE, dt2 DATE) 
    RETURNS VOID AS 
$func$ 
BEGIN 
EXECUTE format(' 
    DROP TABLE IF EXISTS tblq; 
    CREATE TABLE IF NOT EXISTS tblq AS(
    SELECT dt_trx, row_number() OVER (ORDER BY dt_trx DESC) AS row_number 
    FROM stock_trx 
    WHERE dt_trx BETWEEN dt1 AND dt2 
    GROUP BY 1 
    ORDER BY 1 DESC 
    )'); 

END 
$func$ LANGUAGE plpgsql; 

으로 시도했지만 내가 오류가 발생했습니다

SELECT my_function ('2017-01-01', '2017-02-28'); 

아래처럼 SF를 실행하려고 할 때 -> ERROR : 열은 "DT1"

이 하시겠습니까 존재하지 않는 당신의 도움을 구하십시오.

감사 & RGDS, 바유

+0

당신은'형식()'기능도'EXECUTE' 문 또는이 중 하나가 필요하지 않습니다. – Abelisto

답변

0

당신 오류가 분명하다. SELECT 문에서

SELECT dt_trx, row_number() OVER (ORDER BY dt_trx DESC) AS row_number 
    FROM stock_trx 
    WHERE dt_trx BETWEEN dt1 AND dt2 
    GROUP BY 1 
    ORDER BY 1 DESC 

dt1 열이 없습니다. 변수를 사용하고 싶다고 말하지 않았습니다. 문자열을 변수와 연결해보십시오.

그건 그렇고, 그 진술로 테이블을 만드는 경우 ORDER BY를 삭제할 수 있습니다.

+0

안녕하세요 Arkhena, 그렇습니다. dt1을 변수로 사용 했으므로 실행할 때 아래처럼 할 것입니다. SELECT my_function ('2017-01-01', '2017-02-28'); ' 내 질문, 그 변수를 dt1 & dt2로 전달하는 방법 – Bayu

0

사용

format('CREATE ... WHERE dt_trx BETWEEN %L AND %L ...', dt1, dt2) 
+0

감사합니다. Laurenz Albe는 완벽하게 작동합니다. – Bayu