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 4303 게시물 읽기
No. 4303
sequence 를 사용중 이해가 안되어서요
작성자
임옥섭(oslim73)
작성일
2002-08-17 00:53
조회수
1,466

처음 질문드립니다.. postgres 사용 며칠만에.^^;;

 

현재

MySQL로 작업이 진행중 다시 PostgreSQL을 검토하고 있는 상황입니다.

 

MySQL에서는 서버쿼리가 안되어 변수선언을 통해

 

예 >

set @seq = 0;

select (@seq := (@seq + 1) % 300) rn , 이하 생략.

 

이런 형태의 문장을 사용하였습니다.

 

현재 코드중의 상당 부분이 이번 임시 변수 선언으로 처리되어 있는데

 

1. 일단 postgres에서 이런 식으로 변수를 사용할 수 있는지 궁금합니다.

-- 사실 현재 대부분의 코드가

> Select @buf := val1 from T1 ;

> Update val2 = @buf ...;

이런 형태이고 더욱 문제가 되는 것은 기존의 MySQL 코드에서

어떤 조건이 연속일수를 구하기 위해

변수를 0으로 셋팅하고

> select max(case when price > open then (case when @v2 > 0 then @v1 := @v1 + 1 else @v1 end) else @v2 := 0 end) as seq from TB_QD2 T1, TB_QD2 T2 where T1.rn >= 1 and T1.rn <= 30 and T1.code = '00010'

 

이런 식의 문장을 많이 사용하여

변수선언이 가능하면 좋겠습니다

 

2. 두번째는

sequence 사용에 관한 것인데

 

drop sequence rn_seq;

create sequence rn_seq

increment 1 minvalue 1 maxvalue 151 start 1 cycle;

 

insert into TB_QD2 (rn, code, date)

select nextval('rn_seq'), code, date from jd

where date >= 20020102 order by code, date desc;

 

여기서 제가 생각하기엔 코드별로

다시 날짜가 최근부터 1, 2, 3, 이런 순서로 나올것 같은데

 

결과는

nextval | code | date

---------+-------+---------

53 | 00010 | 20020814

40 | 00010 | 20020813

39 | 00010 | 20020812

38 | 00010 | 20020809

37 | 00010 | 20020808

36 | 00010 | 20020807

 

이런식이거든요..

 

물론 JD 테이블의 최초 코드는 00010 이고 가장 최근날짜는 14일 입니다.

12 다음에 9일은 맞고요.. 그런데 seq가 이렇게 나오는것이 이해가 안되어

 

 

그럼. 이만.. 물러갑니다.

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

달아주는 분이 없어서 좀 야매로 라도 답을 답니다.

 

1.

 

변수선언으로 처리하는 것을 SP로 한다면 그냥 하시면 되고 단지 그냥 하는 것이라면,

 

sequence를 만들고

 

시퀀스 값을 넣고

 

현재 시퀀스 값을 변수처럼 쓰면 되겠지요.

 

int 외 형도 될테니 ....

 

좀 모양새가 이쁘진 않아도 이해하긴 쉽죠? ^^;

 

변수를 이용하는게 있는지는 함 찾아보죠.

 

2.

 

select문을 할때 OID 순서로 시퀀스 값이 할당된 이후에 정렬을 하기 때문입니다. 원하시는 쿼리는

 

select nextval('rn_seq'), foo.* from (select code, date from jd

where date >= 20020102 order by code, date desc) as foo;

 

이렇게 되겠습니다. 바로 아시겠죠?

 

오라클의 rownum 땜에 햇갈리신 듯

정회민님이 2002-09-04 17:32에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
4306UHC [1]
장동훈
2002-08-19
962
4305가져오는 데이터의 개수를 제어하는 법좀.. [1]
홍종근
2002-08-19
1414
4304PostgreSQL 로 변환하려구 합니다. [1]
노인석
2002-08-17
1270
4303sequence 를 사용중 이해가 안되어서요 [1]
임옥섭
2002-08-17
1466
4302pg_dump중에 오류가..!! [2]
이서근
2002-08-16
994
4299[질문] plpgsql function 리스트와 소스보기 [2]
정회민
2002-08-14
1097
4298대용량 디비 [1]
조연
2002-08-14
977
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다