2012-09-04 2 views
1

내 코드에서 subselect를 사용하려고하는데 오류가 발생합니다. 나는 솔루션을 많이 발견했다하지만 여전히 작동하지 않습니다구문 오류 또는 "IF"근처에 PostgreSQL

여기

내 코드는 다음과 같습니다

BEGIN; 
IF (SELECT COUNT(*) FROM table1 WHERE Z = 'aaaaa') = 0 

    THEN 
    INSERT INTO table2 (X, Y) VALUES ("abc", 7) 

END IF; 
END; 

및 오류 : 당신이 나를

ERROR: syntax error at or near "IF" 
LINE 2: IF (SELECT COUNT(*) FROM table1 WHERE Path = 'aaaaa') = 0 
     ^


********** Error ********** 

ERROR: syntax error at or near "IF" 
SQL state: 42601 
Character: 8 

도울 수 있을까요?

+1

, 포스터 주변'DO' 블록 또는 함수 정의를 생략하고있다 있습니다. PostgreSQL에서는 익명의 PL/PgSQL 블록을 실행할 수 없으며'DO' 또는'CREATE [OR REPLACE] FUNCTION'에 의해'LANGUAGE' 절로 둘러싸여 야합니다. –

답변

8

"BEGIN"다음에 세미콜론을 삭제 하시겠습니까? 이것이 plpgsql 함수의 본문 인 경우입니다.

psql 스크립트 인 경우 IF 문을 plpgsql에 실행시켜야하므로 DO $$ ... $$ 구문을 입력해야합니다.

또는 물론, 당신과 같이 리팩토링 수 : 다른 나중에이 글을 읽는 사람을 위해

INSERT INTO table2(x,y) 
    SELECT 'abc', 7 
    WHERE NOT EXISTS (SELECT 1 FROM table1 WHERE z = 'aaaaa') 
+0

아, 솔루션처럼 보이지만 어떻게 작동하는지 이해할 수 없습니다. 레코드가 있는지 확인하고 싶습니다. 예 -do nothing, 레코드를 삽입하지 않은 경우 - INSERT 코드가 어떻게 작동합니까? – javaGirl

+0

INSERT는 고정 값 집합을 가질 필요가 없으며 SELECT로 입력 할 수 있습니다. 따라서 SELECT 부분은 독자적으로 실행할 수 있으며 행이 존재하지 않으면'('abc', 7)'을 생성합니다. 이 결과는 INSERT에 제공 될 수 있습니다. – araqnid

+0

흠, 그래서 내가 가지고 있다고 가정 해 봅시다 : 테이블 (X, Y) 값 (A, B)에 INSERT INTO 값 B가 Y 열에없는 경우에만. 모든 코드가 어떻게 보이나요? – javaGirl

관련 문제