database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 9832 게시물 읽기
No. 9832
postgreSQL 함수 관련 질문
작성자
postgres
작성일
2017-05-26 12:09ⓒ
2017-05-26 12:09ⓜ
조회수
7,481

 postgreSQL함수에서

예를들어 어떤 변수를 선언해줄때

 LEVEL2_PROC_CODE1 IC_PROCESS_TBL.PROC_CODE%TYPE;

이렇게 선언해준것은

LEVEL2_PROC_CODE1 이라는 변수를 선언하는데 type을 IC_PROCESS_TBL이라는 테이블의 PROC_CODE컬럼의 type과 같게 선언해준다고 해석되는데요,

 

제가 원하는것은 LEVEL2_PROC_CODE1 이라는 변수의 타입을 배열형으로 선언해주고 싶습니다. 

찾아보니 PostgreSQL에서 배열 데이터 타입은 character varying[], integer[], text[] 등등이 있다고 합니다.

이 타입을 이용해서 저 변수를 배열 타입으로 선언해주고 싶은데

LEVEL2_PROC_CODE1 character varying[]; 이렇게 선언해주면 안되나요??

 

이 글에 대한 댓글이 총 5건 있습니다.

네 그렇게 하시면 됩니다.

김주왕(kimjuking)님이 2017-05-26 12:31에 작성한 댓글입니다.

감사합니다. 위 방법으로 선언이 됬는데요

2개의 with recursive구문을 만들어서

첫번쨰 with recursive구문에서 위에서 설정해준 변수에 값 3개를 저장해주고

두번째 with recursive구문에서 위에서 저장한 변수를 사용하는데 syntax error가 납니다.

혹시 이 원인에 대해 알 수 있을까요? 

postgres님이 2017-05-26 12:37에 작성한 댓글입니다.
이 댓글은 2017-05-26 12:38에 마지막으로 수정되었습니다. Edit

전체를 안보면 모릅니다....ㅋ

김주왕(kimjuking)님이 2017-05-26 12:50에 작성한 댓글입니다.
 

 

CREATE OR REPLACE FUNCTION yccics.find_level_proc(

    in_cycl text,

    in_proc_code text,

    in_root_code text,

    in_level text)

  RETURNS character varying AS

$BODY$

DECLARE

 

 LEVEL2_PROC_CODE1 character varying[];

 LEVEL2_PROC_CODE2 character varying(10);

 

BEGIN

 

WITH RECURSIVE SUB1

AS

(

SELECT CYCL,PROC_CODE,PROC_NAME,PROC_CONT,PRNT_PROC_CODE,0 AS LV

  FROM YCCICS.IC_PROCESS_TBL

 WHERE PRNT_PROC_CODE = IN_ROOT_CODE

   AND CYCL = IN_CYCL

UNION ALL

SELECT A.CYCL,A.PROC_CODE,A.PROC_NAME,A.PROC_CONT,A.PRNT_PROC_CODE,LV+1 AS LV

  FROM YCCICS.IC_PROCESS_TBL A,

       SUB1 B

 WHERE A.CYCL = IN_CYCL

   AND A.PROC_CODE = B.PRNT_PROC_CODE

)

SELECT PROC_CODE

 INTO LEVEL2_PROC_CODE1

  FROM SUB1

  WHERE LV = IN_LEVEL;

 

WITH RECURSIVE SUB2

AS

(

SELECT CYCL,PROC_CODE,PROC_NAME,PROC_CONT,PRNT_PROC_CODE,0 AS LV

  FROM YCCICS.IC_PROCESS_TBL

 WHERE PROC_CODE = IN_PROC_CODE

   AND CYCL = IN_CYCL

   AND LAST_GUBN = 'Y'

UNION ALL

SELECT A.CYCL,A.PROC_CODE,A.PROC_NAME,A.PROC_CONT,A.PRNT_PROC_CODE,LV+1 AS LV

  FROM YCCICS.IC_PROCESS_TBL A,

       SUB2 B

 WHERE A.CYCL = B.CYCL

   AND A.PROC_CODE = B.PRNT_PROC_CODE

)

SELECT PROC_CODE

 INTO LEVEL2_PROC_CODE2

  FROM SUB2

 WHERE PROC_CODE IN LEVEL2_PROC_CODE1;

 RETURN(LEVEL2_PROC_CODE2);

 

 EXCEPTION

        WHEN OTHERS THEN

                RETURN(NULL);

END;

$BODY$

  LANGUAGE plpgsql VOLATILE                                  

  COST 100;

ALTER FUNCTION yccics.find_level_proc(text, text, text, text)

 

두번쨰 recursive구문(SUB2)에서  WHERE PROC_CODE IN LEVEL2_PROC_CODE1;

여기서 에러가 발생합니다.

 

 

 

 

 

postgres님이 2017-05-26 13:14에 작성한 댓글입니다. Edit

직접 안돌려봐서 맞을지는 모르나

 

WHERE PROC_CODE = ANY(LEVEL2_PROC_CODE1);

 

이런식으로 해보세요

 

안되시면 google을 통해 학습하시면서 공부하셔야합니다.

김주왕(kimjuking)님이 2017-05-26 13:41에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9835oracle_fdw 사용 시 create foreign table단계에서 pk지정이 불가능한가요? [3]
postgres
2017-05-31
7680
9834oracle과 postgres table의 pk에 대하여 기초질문 [1]
이재훈
2017-05-31
7016
9833postgre 언어셋 관련 [2]
postgres
2017-05-30
7574
9832postgreSQL 함수 관련 질문 [5]
postgres
2017-05-26
7481
9831WITH RECURSIVE 구문 PATH, ARRAY 추가 [6]
postgres
2017-05-25
10152
9827Ora2pg를 이용한 Oracle -> PostgreSQL 이관시 질문 [2]
postgres
2017-05-23
8827
9823PostgreSQL 10 베타 1 나옴. [1]
전상도
2017-05-19
6980
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.055초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다