2020년 7월 20일 월요일

오라클 시퀀스(ORACLE SEQUENCE)

오라클 시퀀스(ORACLE SEQUENCE)

14. 시퀀스(Sequence)

n 다중 사용자 환경에서 사용하는 숫자(일련번호) 자동 생성기.

n PK, UK 칼럼의 값을 유일하게 자동으로 생성하는 경우에도 사용된다.

n 트랜잭션 내에서 시퀀스가 생성되어 사용되다가 롤백 되는 경우에 다음 시퀀스 번호는 SKIP 될 수 있다.

n 테이블 또는 칼럼과는 독립적으로 생성, 삭제된다.

n CURRVAL : 시퀀스의 현재 값을 리턴

n NEXTVAL : 시퀀스를 증가시키고 next value를 리턴한다.

[형식]

CREATE SEQUENCE sequence_name

[INCREMENT BY n]

[START WITH n]

[{MAXVALUE n | NOMAXVALUE}]

[{MINVALUE n | NOMINVALUE}]

[{CYCLE | NOCYCLE}]

[{CACHE n | NOCACHE}]

n INCREMENT BY n : 생성되는 Sequence번호의 간격을 정수 n으로 정의. 옵션이 생략되면 시퀀스는 1씩 증가한다.

n START WITH n : 첫 번째 Sequence 번호를 정의, 옵션이 생략되면 시퀀스는 1부터 시작한다.

n MAXVALUE n : Sequence의 최대값을 정의. NOMAXVALUE가 default이며 최대값은 10의 27승이다.

n MINVALUE n : 생성 가능한 Sequence의 최소값을 정의, 디폴트가 NOMINVALUE이며 최소값은 1이다.

n CACHE n : 서버가 메모리 캐시에 미리 생성해 놓는 시퀀스 개수. 기본 값은 20 이고 캐시하지 않으려면 NOCACHE 옵션을 사용하면 된다.

[시퀀스를 사용할 수 없는 예]

SQL> CREATE TABLE seq_tab ( a NUMBER DEFAULT s1.NEXTVAL);

(* Error 발생) ß Oracle12C 이상에서는 가능

SQL> SELECT DISTINCT s1.NEXTVAL FROM dual;

(* Error 발생)

SQL> SELECT SUM(salary) FROM s_emp GROUP BY s1.NEXTVAL;

(* Error 발생)

SQL> create sequence seq_e1;

시퀀스가 생성되었습니다.

SQL> select seq_e1.currval from dual;

select seq_e1.currval from dual

*

1행에 오류:

ORA-08002: 시퀀스 SEQ_E1.CURRVAL은 이 세션에서는 정의 되어 있지 않습니다

-- 최초 한번은 NEXTVAL해야만 CURRVAL 값을 조회 가능하다.

SQL> create table test4 (n number);

테이블이 생성되었습니다.

SQL> insert into test4 values (seq_e1.nextval);

1 개의 행이 만들어졌습니다.

SQL> insert into test4 values (seq_e1.nextval);

1 개의 행이 만들어졌습니다.

SQL> insert into test4 values (seq_e1.nextval);

1 개의 행이 만들어졌습니다.

SQL> select * from test4;

N

----------

1

2

3

SQL> drop sequence seq_e1;

시퀀스가 삭제되었습니다.

오라클강좌, 오라클 동의어(Oracle Synonym)

ORACLE강좌, 오라클 동의어(Oracle Synonym)

http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=640

13. 동의어(Synonym)

n 테이블, 뷰, 시퀀스, 프로그램 유닛에 대한 별명이며 공용(public), 전용(private) 두가지 형태로 작성 가능하다. 공용 동의어는 DBA 권한을 가진 사용자만이 생성 가능하고 모든 계정에서 접근 가능 하며, 전용 동의어는 객체에 대한 접근 권한을 얻은 사용자가 작성하는 동의어로 해당 USER에서만 사용 가능 하다.

n 동의어는 Schema Object는 아니지만 스키마 오브젝트를 직접 참조한다.

n 예를 들어 SCOTT 계정에서 ONJ 계정의 STUDENT 테이블을 참조할 때 ONJ.STUDENT 라고 써주어야 하는데 이는 여러 번 사용되는 경우 불편하다. 이러한 경우 ONJ.STUDENT 에 대한 동의어를 만들어서 사용하면 편리하다.

[형식]

CREATE [PUBLIC] SYNONYM [schema.]동의어명

FOR [schema.]object;

PUBLIC : 공용 동의어 정의, 생략하면 전용 동의어 정의함

SQL> conn / as sysdba

연결되었습니다.

SQL> select * from emp;

1행에 오류:

ORA-00942: 테이블 또는 뷰가 존재하지 않습니다

SQL> select count(*) from scott.emp;

COUNT(*)

----------

9

SQL> create synonym emp for scott.emp;

동의어가 생성되었습니다.

SQL> select count(*) from emp;

COUNT(*)

----------

9

-- 공용동의어는 모든 계정에서 사용가능하다.

SQL> create public synonym emp for scott.emp;

동의어가 생성되었습니다.

SQL> create user test identified by test;

사용자가 생성되었습니다.

-- 접속권한 ,기본 테이블등 생성권한, SCOTT의 EMP테이블의 SELECT 권한 부여

SQL> grant connect, resource, select on scott.emp to test;

권한이 부여되었습니다.

SQL> conn test/test

연결되었습니다.

SQL> select count(*) from emp;

COUNT(*)

----------

14

-- DUAL이 공용 동의어(Public Synonym) 임을 확인 하세요.

SQL> COL owner FORMAT A20

SQL> SET linesize 120

SQL> SELECT owner, synonym_name, table_owner from dba_synonyms

2 WHERE synonym_name = 'DUAL' ;

OWNER SYNONYM_NAME TABLE_OWNER

-------------------- ------------------------------ ----------------

PUBLIC DUAL SYS

SQL> drop synonym emp;

동의어가 삭제되었습니다.

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...