SlideShare ist ein Scribd-Unternehmen logo
1 von 8
Downloaden Sie, um offline zu lesen
SQL초보에서 Schema Objects까지
8.1.7 오라클11g 읽기전용 테이블
 Oracle 11g 이전 버전에서 테이블은 다른 사용자에게 SELECT 오브젝트 권한을 주는 경우에만
읽기전용으로 운영이 가능했고, 테이블을 생성한 소유자(OWNER)는 테이블에 Read/Write 권
한이 있어 이 테이블을 읽기전용으로 운영하는 것은 불가능 했다.
 오라클 11g에서부터 “ALTER TABLE 테이블명 READ ONLY” 명령으로 읽기전용 테이블로 운영하
는 것이 가능해졌다.
 읽기 전용 모드에서 테이블에 대한 아래 조작은 가능하다.
Select
Management indexes, constraints
Dropping and deallocation of unused columns
Renaming and moving of the table
Altering the table for physical property changes, row movement, and shrinking the segment
Drop table
 읽기 전용 모드에서 테이블에 대한 아래 조작은 불가능 하다.
DML on table or any table partitions
Truncation of table
Select for update
Adding, removing, renaming, dropping, or setting a column to unused
Dropping a partition or sub partition belonging to the table
Online redefinition
Flashback on the table
[형식]
ALTER TABLE table_name READ ONLY;
ALTER TABLE table_name READ WRITE;
SQL> CREATE TABLE readtest
AS
SELECT 1 AS ID, '오라클자바커뮤니티' AS NAME FROM DUAL;
테이블이 생성되었습니다.
SQL> SELECT * FROM readtest;
ID NAME
---------- ------------------
1 오라클자바커뮤니티
SQL> INSERT INTO readtest VALUES (2, '2길동');
1 개의 행이 만들어졌습니다.
SQL> COMMIT;
커밋이 완료되었습니다.
SQL> ALTER TABLE readtest READ ONLY;
테이블이 변경되었습니다.
SQL> INSERT INTO readtest VALUES (3, '3길동');
INSERT INTO readtest VALUES (3, '3길동')
*
1행에 오류:
ORA-12081: "SCOTT"."READTEST" 테이블에 작업을 갱신하는 것이 허용되지 않습니다
SQL> DELETE FROM readtest;
DELETE FROM readtest
*
1행에 오류:
ORA-12081: "SCOTT"."READTEST" 테이블에 작업을 갱신하는 것이 허용되지 않습니다
SQL> TRUNCATE TABLE readtest;
TRUNCATE TABLE readtest
*
1행에 오류:
ORA-12081: "SCOTT"."READTEST" 테이블에 작업을 갱신하는 것이 허용되지 않습니다
SQL> ALTER TABLE readtest READ WRITE;
SQL> DELETE FROM readtest;
2 행이 삭제되었습니다.
SQL> COMMIT;
SQL> ALTER TABLE readtest READ ONLY;
SQL> DROP TABLE readtest;
-- 읽기전용 테이블 이라도 DROP TABLE은 가능하다.
8.1.8 오라클11g 가상 칼럼(Virtual Column)
 Oracle 11g에서 새로 소개된 가상 컬럼(Virtual Column)은 다른 칼럼의 값들을 이용하여 새로
운 값을 만들어 내는 경우에 유용하게 사용될 수 있다.
 일반 컬럼과 유사하지만 다음과 같은 차이가 있다.
표현식등에 의해 정의.(사원 테이블에서 급여와 수당 칼럼을 이용하여 년봉을 계산)
DB에 저장되지는 않으며 실행 중에 계산된다.
UPDATE, DELETE의 WHERE절에 나타날 수 있지만 칼럼값 자체에 대한 변경은 불가능 하다.
[형식]
column_name [datatype] [GENERATED ALWAYS] AS [expression] [VIRTUAL]
SQL>DROP TABLE emp21 PURGE;
SQL>DROP TABLE emp22 PURGE;
SQL>DROP TABLE emp23 PURGE;
SQL> CREATE TABLE EMP21 (
SABUN NUMBER,
IRUM VARCHAR2(50),
SAL NUMBER,
BONUS NUMBER,
TOTAL_SAL NUMBER GENERATED ALWAYS AS (SAL * 12 + BONUS)
);
테이블이 생성되었습니다.
SQL> SELECT column_name, data_type, data_length, data_default, virtual_column
FROM user_tab_cols
WHERE table_name = 'EMP21';
COLUMN_NAME DATA_TYPE DATA_LENGTH DATA_DEFAULT VIRTUAL_COLUMN
--------------------------------------------------------------------------------------------------------------
SABUN NUMBER 22 NO
IRUM VARCHAR2 50 NO
SAL NUMBER 22 NO
BONUS NUMBER 22 NO
TOTAL_SAL NUMBER 22 "SAL"*12+"BONUS" YES
-- 간단히 급여와 보너스를 입력받으면 연봉을 리턴해 주는 함수를 하나 만들자.
-- DETERMINISTIC : 함수의 입력 값이 같다면 출력 값도 항상 같음을 선언(10gR2에 새롭게 추가
된 캐싱 효과), FBI(function based index)는 인덱스가 처음 생성 또는 엔트리가 추가되는 시점의
함수 출력 값을 저장해 두는 원리인데 오라클은 Deterministic으로 선언하지 않은 함수에 대해서
FBI 생성 거부한다. 즉 DETERMINISTIC으로 함수를 선언해야지 함수기반 인덱스에서 이용될 수
있다.
SQL> CREATE OR REPLACE FUNCTION
get_annual( p_sal NUMBER,
p_bonus NUMBER)
RETURN NUMBER
DETERMINISTIC
IS
BEGIN
RETURN p_sal * 12 + p_bonus;
END;
/
함수가 생성되었습니다.
-- 위에서 만든 get_annual 함수를 이용하여 가상칼럼을 만들자.
SQL> CREATE TABLE EMP22 (
SABUN NUMBER,
IRUM VARCHAR2(50),
SAL NUMBER,
BONUS NUMBER,
TOTAL_SAL NUMBER AS (get_annual(sal, bonus)) virtual
);
테이블이 생성되었습니다.
-- 테이블의 total_sal 칼럼이 get_annual 함수에 의존해서 만들어 졌으므로 get_annual 함수가
DETERMINISTIC 으로 선언되어야 함수기반 인덱스가 생성가능 하다. 아래 인덱스는 함수기반 인
덱스로 만들어 진다.
SQL> CREATE INDEX idx_emp22_total_sal ON emp22(total_sal);
인덱스가 생성되었습니다.
-- 아래에서 생성된 인덱스의 타입을 확인하자.
SQL> SELECT index_name, index_type
FROM user_indexes
WHERE table_name = 'EMP22';
INDEX_NAME INDEX_TYPE
------------------------------ ------------------------------------
IDX_EMP22_TOTAL_SAL FUNCTION-BASED NORMAL
-- total_sal 칼럼에는 직접값을 INSERT하지 않아도 자동으로 값이 만들어진다.
SQL> INSERT INTO EMP22 (sabun, irum, sal, bonus)
WITH DATA AS
(SELECT 100 sabun, 'AAA' irum, 20000 sal, 3000 bonus
FROM DUAL
UNION
SELECT 200, 'BBB', 12000, 2000
FROM DUAL
UNION
SELECT 300, 'CCC', 32100, 1000
FROM DUAL
UNION
SELECT 400, 'DDD', 24300, 5000
FROM DUAL
UNION
SELECT 500, 'EEE', 12300, 8000
FROM DUAL)
SELECT *
FROM DATA;
SQL> COMMIT;
SQL> SELECT * FROM EMP22;
SABUN IRUM SAL BONUS TOTAL_SAL
---------- -------------------------------------------------- ---------- ---------- ----------
100 AAA 20000 3000 243000
200 BBB 12000 2000 146000
300 CCC 32100 1000 386200
400 DDD 24300 5000 296600
500 EEE 12300 8000 155600
-- 가상칼럼에 대한 변경은 불가능하다.
SQL> UPDATE emp22 SET total_sal = 0;
UPDATE emp10 SET total_sal = 0
*
1행에 오류:
ORA-54017: UPDATE 작업은 가상 열에서 허용되지 않습니다.
-- 이번에는 가상칼럼의 값을 기준으로 파티셔닝을 해 보자. 오라클 이전버전에서는 테이블의 물
리적인 컬럼으로만 파티션을 허용했지만 Oracle11g 이후 에서는 가상 컬럼도 가능하도록 했다.
SQL> CREATE TABLE EMP23 (
SABUN NUMBER,
IRUM VARCHAR2(50),
SAL NUMBER,
BONUS NUMBER,
TOTAL_SAL NUMBER GENERATED ALWAYS AS (sal*12 + bonus)
)
PARTITION BY RANGE (total_sal)
(PARTITION sal_200000 VALUES LESS THAN (200000),
PARTITION sal_400000 VALUES LESS THAN (400000),
PARTITION sal_600000 VALUES LESS THAN (600000),
PARTITION sal_800000 VALUES LESS THAN (800000),
PARTITION sal_default VALUES LESS THAN (MAXVALUE));
테이블이 생성되었습니다.
SQL> INSERT INTO EMP23 (SABUN, IRUM, SAL, BONUS)
WITH DATA AS
(SELECT 100 SABUN, 'AAA' IRUM, 20000 SAL, 3000 BONUS
FROM DUAL
UNION
SELECT 200, 'BBB', 12000, 2000
FROM DUAL
UNION
SELECT 300, 'CCC', 32100, 1000
FROM DUAL
UNION
SELECT 400, 'DDD', 24300, 5000
FROM DUAL
UNION
SELECT 500, 'EEE', 12300, 8000
FROM DUAL)
SELECT *
FROM DATA;
5 개의 행이 만들어졌습니다.
SQL> COMMIT;
커밋이 완료되었습니다.
SQL> SELECT * FROM emp23;
SABUN IRUM SAL BONUS TOTAL_SAL
---------- -------------------------------------------------- ---------- ---------- ----------
200 BBB 12000 2000 146000
500 EEE 12300 8000 155600
100 AAA 20000 3000 243000
300 CCC 32100 1000 386200
400 DDD 24300 5000 296600
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'EMP23',granularity => 'PARTITION');
PL/SQL 처리가 정상적으로 완료되었습니다.
SQL> SELECT table_name, partition_name, num_rows
FROM user_tab_partitions
WHERE table_name = 'EMP23'
ORDER BY partition_name;
TABLE_NAME PARTITION_NAME NUM_ROWS
------------------------------ ------------------------------ ----------
EMP23 SAL_200000 2
EMP23 SAL_400000 3
EMP23 SAL_600000 0
EMP23 SAL_800000 0
EMP23 SAL_DEFAULT 0
SQL> UPDATE emp23
SET sal = 30000
WHERE sabun = 500;
UPDATE emp23
*
1행에 오류:
ORA-14402: 분할영역 키 열을 수정하는것은 분할영역 변경이 생깁니다
-- sal 칼럼에 대한 값 변경은 파티션영역의 total_sal값의 변경이므로 row movement를 enable
해야 한다.
SQL> ALTER TABLE emp23 ENABLE ROW MOVEMENT;
테이블이 변경되었습니다.
SQL> UPDATE emp23
SET sal = 30000
WHERE sabun = 500;
1 행이 갱신되었습니다.
SQL> COMMIT;
커밋이 완료되었습니다.

Weitere ähnliche Inhalte

Andere mochten auch

#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육
#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육
#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육탑크리에듀(구로디지털단지역3번출구 2분거리)
 
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)
#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)
#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스/ 구로오라클학원/ 구로자바학원/ 자바학원/ 오라클학원/ 구...
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스/ 구로오라클학원/ 구로자바학원/ 자바학원/ 오라클학원/ 구...Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스/ 구로오라클학원/ 구로자바학원/ 자바학원/ 오라클학원/ 구...
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스/ 구로오라클학원/ 구로자바학원/ 자바학원/ 오라클학원/ 구...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역탑크리에듀(구로디지털단지역3번출구 2분거리)
 

Andere mochten auch (6)

#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육
#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육
#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육
 
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지
 
#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)
#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)
#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)
 
IT실무교육학원/자바학원/오라클학원/SQL기초학원추천_#11.SQL초보에서 Schema Objects까지
IT실무교육학원/자바학원/오라클학원/SQL기초학원추천_#11.SQL초보에서 Schema Objects까지IT실무교육학원/자바학원/오라클학원/SQL기초학원추천_#11.SQL초보에서 Schema Objects까지
IT실무교육학원/자바학원/오라클학원/SQL기초학원추천_#11.SQL초보에서 Schema Objects까지
 
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스/ 구로오라클학원/ 구로자바학원/ 자바학원/ 오라클학원/ 구...
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스/ 구로오라클학원/ 구로자바학원/ 자바학원/ 오라클학원/ 구...Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스/ 구로오라클학원/ 구로자바학원/ 자바학원/ 오라클학원/ 구...
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스/ 구로오라클학원/ 구로자바학원/ 자바학원/ 오라클학원/ 구...
 
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역
 

Mehr von 탑크리에듀(구로디지털단지역3번출구 2분거리)

[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]탑크리에듀(구로디지털단지역3번출구 2분거리)
 

Mehr von 탑크리에듀(구로디지털단지역3번출구 2분거리) (20)

자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
 
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
 
[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육
 
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
 
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
 
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
 
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
 
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
 
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
 
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
 
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
 

[IT실무교육/구로IT학원/오라클학원/SQL학원추천/자바교육/닷넷/자마린]#22.SQL초보에서 Schema Objects까지

  • 1. SQL초보에서 Schema Objects까지 8.1.7 오라클11g 읽기전용 테이블  Oracle 11g 이전 버전에서 테이블은 다른 사용자에게 SELECT 오브젝트 권한을 주는 경우에만 읽기전용으로 운영이 가능했고, 테이블을 생성한 소유자(OWNER)는 테이블에 Read/Write 권 한이 있어 이 테이블을 읽기전용으로 운영하는 것은 불가능 했다.  오라클 11g에서부터 “ALTER TABLE 테이블명 READ ONLY” 명령으로 읽기전용 테이블로 운영하 는 것이 가능해졌다.  읽기 전용 모드에서 테이블에 대한 아래 조작은 가능하다. Select Management indexes, constraints Dropping and deallocation of unused columns Renaming and moving of the table Altering the table for physical property changes, row movement, and shrinking the segment Drop table  읽기 전용 모드에서 테이블에 대한 아래 조작은 불가능 하다. DML on table or any table partitions Truncation of table Select for update Adding, removing, renaming, dropping, or setting a column to unused Dropping a partition or sub partition belonging to the table Online redefinition Flashback on the table [형식] ALTER TABLE table_name READ ONLY; ALTER TABLE table_name READ WRITE; SQL> CREATE TABLE readtest AS SELECT 1 AS ID, '오라클자바커뮤니티' AS NAME FROM DUAL; 테이블이 생성되었습니다.
  • 2. SQL> SELECT * FROM readtest; ID NAME ---------- ------------------ 1 오라클자바커뮤니티 SQL> INSERT INTO readtest VALUES (2, '2길동'); 1 개의 행이 만들어졌습니다. SQL> COMMIT; 커밋이 완료되었습니다. SQL> ALTER TABLE readtest READ ONLY; 테이블이 변경되었습니다. SQL> INSERT INTO readtest VALUES (3, '3길동'); INSERT INTO readtest VALUES (3, '3길동') * 1행에 오류: ORA-12081: "SCOTT"."READTEST" 테이블에 작업을 갱신하는 것이 허용되지 않습니다 SQL> DELETE FROM readtest; DELETE FROM readtest * 1행에 오류: ORA-12081: "SCOTT"."READTEST" 테이블에 작업을 갱신하는 것이 허용되지 않습니다 SQL> TRUNCATE TABLE readtest; TRUNCATE TABLE readtest * 1행에 오류: ORA-12081: "SCOTT"."READTEST" 테이블에 작업을 갱신하는 것이 허용되지 않습니다 SQL> ALTER TABLE readtest READ WRITE; SQL> DELETE FROM readtest; 2 행이 삭제되었습니다. SQL> COMMIT;
  • 3. SQL> ALTER TABLE readtest READ ONLY; SQL> DROP TABLE readtest; -- 읽기전용 테이블 이라도 DROP TABLE은 가능하다. 8.1.8 오라클11g 가상 칼럼(Virtual Column)  Oracle 11g에서 새로 소개된 가상 컬럼(Virtual Column)은 다른 칼럼의 값들을 이용하여 새로 운 값을 만들어 내는 경우에 유용하게 사용될 수 있다.  일반 컬럼과 유사하지만 다음과 같은 차이가 있다. 표현식등에 의해 정의.(사원 테이블에서 급여와 수당 칼럼을 이용하여 년봉을 계산) DB에 저장되지는 않으며 실행 중에 계산된다. UPDATE, DELETE의 WHERE절에 나타날 수 있지만 칼럼값 자체에 대한 변경은 불가능 하다. [형식] column_name [datatype] [GENERATED ALWAYS] AS [expression] [VIRTUAL] SQL>DROP TABLE emp21 PURGE; SQL>DROP TABLE emp22 PURGE; SQL>DROP TABLE emp23 PURGE; SQL> CREATE TABLE EMP21 ( SABUN NUMBER, IRUM VARCHAR2(50), SAL NUMBER, BONUS NUMBER, TOTAL_SAL NUMBER GENERATED ALWAYS AS (SAL * 12 + BONUS) ); 테이블이 생성되었습니다. SQL> SELECT column_name, data_type, data_length, data_default, virtual_column FROM user_tab_cols WHERE table_name = 'EMP21'; COLUMN_NAME DATA_TYPE DATA_LENGTH DATA_DEFAULT VIRTUAL_COLUMN
  • 4. -------------------------------------------------------------------------------------------------------------- SABUN NUMBER 22 NO IRUM VARCHAR2 50 NO SAL NUMBER 22 NO BONUS NUMBER 22 NO TOTAL_SAL NUMBER 22 "SAL"*12+"BONUS" YES -- 간단히 급여와 보너스를 입력받으면 연봉을 리턴해 주는 함수를 하나 만들자. -- DETERMINISTIC : 함수의 입력 값이 같다면 출력 값도 항상 같음을 선언(10gR2에 새롭게 추가 된 캐싱 효과), FBI(function based index)는 인덱스가 처음 생성 또는 엔트리가 추가되는 시점의 함수 출력 값을 저장해 두는 원리인데 오라클은 Deterministic으로 선언하지 않은 함수에 대해서 FBI 생성 거부한다. 즉 DETERMINISTIC으로 함수를 선언해야지 함수기반 인덱스에서 이용될 수 있다. SQL> CREATE OR REPLACE FUNCTION get_annual( p_sal NUMBER, p_bonus NUMBER) RETURN NUMBER DETERMINISTIC IS BEGIN RETURN p_sal * 12 + p_bonus; END; / 함수가 생성되었습니다. -- 위에서 만든 get_annual 함수를 이용하여 가상칼럼을 만들자. SQL> CREATE TABLE EMP22 ( SABUN NUMBER, IRUM VARCHAR2(50), SAL NUMBER, BONUS NUMBER, TOTAL_SAL NUMBER AS (get_annual(sal, bonus)) virtual ); 테이블이 생성되었습니다. -- 테이블의 total_sal 칼럼이 get_annual 함수에 의존해서 만들어 졌으므로 get_annual 함수가
  • 5. DETERMINISTIC 으로 선언되어야 함수기반 인덱스가 생성가능 하다. 아래 인덱스는 함수기반 인 덱스로 만들어 진다. SQL> CREATE INDEX idx_emp22_total_sal ON emp22(total_sal); 인덱스가 생성되었습니다. -- 아래에서 생성된 인덱스의 타입을 확인하자. SQL> SELECT index_name, index_type FROM user_indexes WHERE table_name = 'EMP22'; INDEX_NAME INDEX_TYPE ------------------------------ ------------------------------------ IDX_EMP22_TOTAL_SAL FUNCTION-BASED NORMAL -- total_sal 칼럼에는 직접값을 INSERT하지 않아도 자동으로 값이 만들어진다. SQL> INSERT INTO EMP22 (sabun, irum, sal, bonus) WITH DATA AS (SELECT 100 sabun, 'AAA' irum, 20000 sal, 3000 bonus FROM DUAL UNION SELECT 200, 'BBB', 12000, 2000 FROM DUAL UNION SELECT 300, 'CCC', 32100, 1000 FROM DUAL UNION SELECT 400, 'DDD', 24300, 5000 FROM DUAL UNION SELECT 500, 'EEE', 12300, 8000 FROM DUAL) SELECT * FROM DATA; SQL> COMMIT;
  • 6. SQL> SELECT * FROM EMP22; SABUN IRUM SAL BONUS TOTAL_SAL ---------- -------------------------------------------------- ---------- ---------- ---------- 100 AAA 20000 3000 243000 200 BBB 12000 2000 146000 300 CCC 32100 1000 386200 400 DDD 24300 5000 296600 500 EEE 12300 8000 155600 -- 가상칼럼에 대한 변경은 불가능하다. SQL> UPDATE emp22 SET total_sal = 0; UPDATE emp10 SET total_sal = 0 * 1행에 오류: ORA-54017: UPDATE 작업은 가상 열에서 허용되지 않습니다. -- 이번에는 가상칼럼의 값을 기준으로 파티셔닝을 해 보자. 오라클 이전버전에서는 테이블의 물 리적인 컬럼으로만 파티션을 허용했지만 Oracle11g 이후 에서는 가상 컬럼도 가능하도록 했다. SQL> CREATE TABLE EMP23 ( SABUN NUMBER, IRUM VARCHAR2(50), SAL NUMBER, BONUS NUMBER, TOTAL_SAL NUMBER GENERATED ALWAYS AS (sal*12 + bonus) ) PARTITION BY RANGE (total_sal) (PARTITION sal_200000 VALUES LESS THAN (200000), PARTITION sal_400000 VALUES LESS THAN (400000), PARTITION sal_600000 VALUES LESS THAN (600000), PARTITION sal_800000 VALUES LESS THAN (800000), PARTITION sal_default VALUES LESS THAN (MAXVALUE)); 테이블이 생성되었습니다. SQL> INSERT INTO EMP23 (SABUN, IRUM, SAL, BONUS) WITH DATA AS (SELECT 100 SABUN, 'AAA' IRUM, 20000 SAL, 3000 BONUS
  • 7. FROM DUAL UNION SELECT 200, 'BBB', 12000, 2000 FROM DUAL UNION SELECT 300, 'CCC', 32100, 1000 FROM DUAL UNION SELECT 400, 'DDD', 24300, 5000 FROM DUAL UNION SELECT 500, 'EEE', 12300, 8000 FROM DUAL) SELECT * FROM DATA; 5 개의 행이 만들어졌습니다. SQL> COMMIT; 커밋이 완료되었습니다. SQL> SELECT * FROM emp23; SABUN IRUM SAL BONUS TOTAL_SAL ---------- -------------------------------------------------- ---------- ---------- ---------- 200 BBB 12000 2000 146000 500 EEE 12300 8000 155600 100 AAA 20000 3000 243000 300 CCC 32100 1000 386200 400 DDD 24300 5000 296600 SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'EMP23',granularity => 'PARTITION'); PL/SQL 처리가 정상적으로 완료되었습니다. SQL> SELECT table_name, partition_name, num_rows FROM user_tab_partitions WHERE table_name = 'EMP23' ORDER BY partition_name;
  • 8. TABLE_NAME PARTITION_NAME NUM_ROWS ------------------------------ ------------------------------ ---------- EMP23 SAL_200000 2 EMP23 SAL_400000 3 EMP23 SAL_600000 0 EMP23 SAL_800000 0 EMP23 SAL_DEFAULT 0 SQL> UPDATE emp23 SET sal = 30000 WHERE sabun = 500; UPDATE emp23 * 1행에 오류: ORA-14402: 분할영역 키 열을 수정하는것은 분할영역 변경이 생깁니다 -- sal 칼럼에 대한 값 변경은 파티션영역의 total_sal값의 변경이므로 row movement를 enable 해야 한다. SQL> ALTER TABLE emp23 ENABLE ROW MOVEMENT; 테이블이 변경되었습니다. SQL> UPDATE emp23 SET sal = 30000 WHERE sabun = 500; 1 행이 갱신되었습니다. SQL> COMMIT; 커밋이 완료되었습니다.