안녕하세요. 궁금한점이 있어서 질문드립니다.
아래는 제가 테스트로 만든 뷰에서 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의 기능차이일까요 아니면 데이터베이스 정합성을 유지하기 위함일까요? |