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 9831 게시물 읽기
No. 9831
WITH RECURSIVE 구문 PATH, ARRAY 추가
작성자
postgres
작성일
2017-05-25 10:33ⓒ
2017-05-25 11:11ⓜ
조회수
10,152

쿼리 먼저 올려드립니다.

WITH RECURSIVE  HUN(
cycl, proc_code, proc_name, prnt_proc_code, LEVEL, PATH, CYCLE) AS
(
SELECT A.cycl, A.proc_code, A.proc_name, A.prnt_proc_code, 0, ARRAY[A.proc_code], false
FROM yccics.IC_PROCESS_TBL A
WHERE A.CYCL = '200501'
 AND A.LAST_GUBN = 'N'
 AND A.PROC_CODE = 'P000001'
 
UNION ALL
 
SELECT A.cycl, A.proc_code, A.proc_name, A.prnt_proc_code, LEVEL + 1, PATH||A.proc_code, A.proc_code=ANY(PATH)  
FROM yccics.IC_PROCESS_TBL A, HUN B
WHERE A.PRNT_PROC_CODE = B.PROC_CODE
 AND A.CYCL = B.CYCL
 AND NOT CYCLE
)
SELECT cycl, proc_code, lpad('', 4*LEVEL) || proc_name, prnt_proc_code, LEVEL, PATH
FROM HUN ORDER BY PARH;

 특정 table을 with recursive구문으로 트리구조 형태로 조회하려고 하고, 보기 편하게 배열을 추가하려고 하는데

쿼리구문 시작 위에서 부터 4번째 라인에 있는 ARRAY에서 에러가 납니다..

에러 내용은

ERROR:  recursive query "hun" column 6 has type character varying(10)[] in non-recursive term but type character varying[] overall
LINE 4: ...l, A.proc_code, A.proc_name, A.prnt_proc_code, 0, ARRAY[A.pr...
                                                                             ^
HINT:  Cast the output of the non-recursive term to the correct type.
********** Error **********
 
ERROR: recursive query "hun" column 6 has type character varying(10)[] in non-recursive term but type character varying[] overall
SQL state: 42804
Hint: Cast the output of the non-recursive term to the correct type.
Character: 160

이렇습니다.  비 재귀용어를 재귀용어로 바꾸라는데 ARRAY를 어떻게 바꾸면 되나요?

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

varchar(10) 관련되서 난거 같습니다.

문제되는 내용에 대해 varchar로 선언해서 해보세요

김주왕(kimjuking)님이 2017-05-25 13:44에 작성한 댓글입니다.

에러부분 찾아봤는데

ARRAY[A.----- ]

이 안에 들어가는 A.컬럼의 type이 charcter varying이라 에러가 나는것같습니다.

실제 테이블에서 이 per_code컬럼의 타입이 charcter varying(10)이거든요

per_code 컬럼을 기준으로 path를 정렬하기때문에 꼭 per_code라는 컬럼만 들어가야 하는데 

charcter varying타입의 컬럼으로는 ARRAY[A.------] 이 안에 넣을 수 없나요?

 

다른 테이블을 봤는데 그 테이블은 item_id라는  컬럼을 기준으로 path를 정렬해서 저 컬럼값이 들어가는데 ARRAY[A.ITEM_ID]이 경우는 에러가 나지 않습니다. 그이 유는 ITEM_ID 컬럼의 타입이 integer이기 때문입니다. 

 

 

 

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

제 경험상은 해당 컬럼을 varchar(10)에서 varchar로 변환하셔야 에러가 없을겁니다.

김주왕(kimjuking)님이 2017-05-25 14:35에 작성한 댓글입니다.

postgresql 기준 

현재 per_code [varchar(10)] 컬럼에 data들이 이미 들어있는상태인데

해당 컬럼의 크기를 변경해도 상관 없는건가요?

postgres님이 2017-05-25 14:54에 작성한 댓글입니다.
이 댓글은 2017-05-25 14:55에 마지막으로 수정되었습니다. Edit

네 lock은 잡히겠지만 운영중이아니라면 상관없습니다.

 

김주왕(kimjuking)님이 2017-05-25 15:04에 작성한 댓글입니다.

답변 감사합니다. 정말 큰 도움이 되었습니다! 

postgres님이 2017-05-25 15:56에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
9834oracle과 postgres table의 pk에 대하여 기초질문 [1]
이재훈
2017-05-31
7014
9833postgre 언어셋 관련 [2]
postgres
2017-05-30
7573
9832postgreSQL 함수 관련 질문 [5]
postgres
2017-05-26
7479
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
6978
9822ora2pg 사용법 [3]
postgres
2017-05-18
7967
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.052초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다