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 10120 게시물 읽기
No. 10120
view에서 sequence 사용관련
작성자
정상규(pajama)
작성일
2019-12-13 13:20
조회수
663

안녕하세요. 궁금한점이 있어서 질문드립니다.

아래는 제가 테스트로 만든 뷰에서 sequence의 nextval 값을 참조하는 예제인데요.

[postgres@db1 ~]$ psql
psql (9.4.24)
Type "help" for help.

postgres=# create sequence myseq;
CREATE SEQUENCE
postgres=# create view seq_v1 (seq_num) as select nextval('myseq');
CREATE VIEW
postgres=# select * from seq_v1
;
 seq_num
---------
       1
(1 row)
 
 
인포믹스나 오라클 Db2는 위와같이 뷰에서 직접 nextval 값을 사용할 수 없습니다.
아래는 오라클에서의 예입니다.
 
[oracle:/work2/ORACLE] sqlplus "/as sysdba"

SQL*Plus: Release 11.2.0.1.0 Production on Fri Dec 13 13:16:04 2019

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create sequence myseq;

Sequence created.

SQL> create view seq_v1 (seq_num) as select myseq.nextval from dual;
create view seq_v1 (seq_num) as select myseq.nextval from dual
                                             *
ERROR at line 1:
ORA-02287: sequence number not allowed here
 
 
그래서 사용자 함수를 생성해서 사용하는데요.
이런 제한이 단순히 DBMS의 기능차이일까요 아니면 데이터베이스 정합성을 유지하기 위함일까요?
이 글에 대한 댓글이 총 2건 있습니다.

무엇이 궁금한지는 모르겠지만,  살펴보면서,

'아, 이렇게 다르구나' 하시면 되지 않을까요?

 

각 데이터베이스별 특성을 잘 살펴, 잘 쓰면 되죠.

 

이제 아니라, 좀 더 왜 그들은 그들의 방식을 선택했을까? 이런 것이 궁금하면, 열심히 더 공부해서 데이터베이스 학자가 되어야겠죠.

 

넓게 배우고, 꼼꼼히 묻고, 깊게 생각하고, 잘 고르고,

이것들을 바탕으로(thus)

마음 따뜻히 움직여야죠! - 중용에서

김상기(ioseph)님이 2019-12-13 21:36에 작성한 댓글입니다.
이 댓글은 2019-12-13 22:15에 마지막으로 수정되었습니다.

안녕하세요. 답변주셔서 감사합니다. 제 질문이 명확하지 않았네요.

궁금한 것은 PostgreSQL에서는 왜 VIEW에서 nextval 값을 참조할수 있는가였습니다.

테스트 해본 동기는 고객사의 sql server 개발자분 문의에서 시작되었습니다.

sql server에서 linked server를 거쳐 원격지의 db2 sequence 값을 어떻게 참조하는가 였는데요.

1. 이 값을 가져오기 위해 db2에 sequence 값을 참조하는 view를 만들고

2. sql server는 db2의 view를 참조하도록 하려고 했습니다만.. db2에서는 sequence의 nextval 값을 참조하는 뷰를 만들 수 없었습니다. 그래서 원글과 같이 사용자 정의 함수를 호출하는 식으로 사용하도록 유도했습니다.

그렇게 일단락된 이후부터는 회사 상사분과 같이 다른 DBMS도 마찬가지인가하여 informix, sql server, oracle, postgresql 에서는 동일한 조건에서 어떻게 동작하는지 테스트하게 됐습니다. 각각 테스트해본 결과 postgresql 을 제외한 다른 DBMS에서는 view에서 sequence nextval 값을 참조할 수 없는 제한이 있었습니다.

말씀하신대로 DBMS 별로 특성이 있으므로 그에 맞게 사용해야 하는것은 지당하신 말씀입니다. 다만 그런 제한을 둔것은 명시되어 있는데 왜 사용할 수 없는지에 대해서는 각 DBMS 벤더사의 매뉴얼에 설명이 없어서 여기서 자문을 구해보려고 글을 올리게 되었습니다. 공부하겠습니다.

정상규(pajama)님이 2019-12-14 01:11에 작성한 댓글입니다.
이 댓글은 2019-12-14 01:14에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
10123utf-8 에러 해결 [1]
whangwls
2019-12-24
799
10122잡답 - 과거에 postgresql 을 오픈DB로 사용하지 않았던 이유 [2]
lucky
2019-12-24
900
10121csv파일 import 시 timestamp의 초단위가 00으로 나옵니다. [1]
rla01234
2019-12-19
632
10120view에서 sequence 사용관련 [2]
정상규
2019-12-13
663
10119대용량 파일을 insert하려는데 효율적인 방법인지 고견 부탁 드립니다. [2]
신입생
2019-12-12
750
10118view 생성시 view컬럼의 이름과 데이터타입 크기 설정하는방법 [1]
성스
2019-12-10
600
10117PGDay.Seoul 2019 광고 [1]
김상기
2019-12-03
727
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2020 DSN, All rights reserved.
작업시간: 0.011초, 이곳 서비스는
	PostgreSQL v13.0으로 자료를 관리합니다