오늘 알면 좋은 내용 : GRANT를 가지고 ROW를 이용해 시스템 권한 주는 것(컨넥트, 리소스), ALTER 비번 변경, 락 -> 언락 만들기
사용자(USER) : DBMS 서버에 접속하여 사용할 수 있는 허락받은 사용자 - 계정(ACCOUNT)
계정 관리는 관리자(SYS 또는 SYSTEM)만 가능
형식)CREATE USER 계정명
KIM 계정 생성 - 관리자 접속 세션
CREATE USER KIM IDENTIFIED BY 1234;
형식)ALTER USER 사용자명 IDENTIFIED BY 비밀번호
KIM 계정의 비밀번호 변경 - 관리자 접속 세션
ALTER USER KIM IDENTIFIED BY 5678;
=> 계정 확인
계정 상태 변경 : OPEN(계정 활성화) 또는 LOCK(계정 비활성 - 접속 불가능)
--오라클 접속시 계정의 비밀번호를 5번 틀리면 계정 상태가 자동으로 LOCK 상태로 변경되어 접속 불가능
형식)ALTER USER 계정명 ACCOUNT {LOCK|UNLOCK}
KIM 계정의 OPEN 상태를 LOCK 상태로 변경 - 관리자 접속 세션
--SELECT USERNAME,ACCOUNT_STATUS,DEFAULT_TABLESPACE,CREATED FROM DBA_USERS WHERE USERNAME='KIM';
--ALTER USER KIM ACCOUNT LOCK;
--SELECT USERNAME,ACCOUNT_STATUS,DEFAULT_TABLESPACE,CREATED FROM DBA_USERS WHERE USERNAME='KIM';
KIM 계정의 LOCK 상태를 OPEN 상태로 변경 - 관리자 접속 세션
--ALTER USER KIM ACCOUNT UNLOCK;
--SELECT USERNAME,ACCOUNT_STATUS,DEFAULT_TABLESPACE,CREATED FROM DBA_USERS WHERE USERNAME='KIM';
KIM 계정의 기본 테이블스페이스를 SYSTEM에서 USERS로 변경 - 관리자 접속 세션
--SELECT USERNAME,ACCOUNT_STATUS,DEFAULT_TABLESPACE,CREATED FROM DBA_USERS WHERE USERNAME='KIM';
--ALTER USER KIM DEFAULT TABLESPACE USERS;
--SELECT USERNAME,ACCOUNT_STATUS,DEFAULT_TABLESPACE,CREATED FROM DBA_USERS WHERE USERNAME='KIM';
형식)DROP USER 계정명
KIM 계정 삭제
-- 관리자 접속 세션에 작성
--DROP USER KIM;
--SELECT
USERNAME,ACCOUNT_STATUS,DEFAULT_TABLESPACE,CREATED FROM DBA_USERS WHERE USERNAME='KIM';
: 계정에게 권한을 부여하거나 회수하는 명령
--오라클 권한(PRIVILEGE) : 시스템 권한(관리자) 또는 객체 권한(일반 사용자)
--롤(ROLE) : 시스템 권한을 그룹화하여 표현한 명칭
--형식)GRANT {PRIVILEGE|ROLE},{PRIVILEGE|ROLE},... TO 계정명 [WITH ADMIN OPTION][IDENTIFIED BY 비밀번호]
--계정명 대신 PUBLIC 키워드를 사용할 경우 모든 사용자에게 일괄적으로 시스템 권한 부여
--권한을 부여할 계정이 없는 경우 계정 자동 생성
--계정이 자동으로 생성될 경우 반드시 IDENTIFIED BY 구문으로 비밀번호 설정
INSERT,UPDATE,DELETE,SELECT 등의 명령과 관련된 명령
형식)GRANT {ALL|PRIVILEGE,...} ON 객체명 TO 계정명 [WITH GRANT OPTION]
KIM 계정이 SCOTT 스키마의 존재하는 DEPT 테이블의 모든 부서정보 검색 - SQLPLUS 사용 : 검색 불가능
-> SCOTT 스키마에 있는 DEPT 테이블에 대한 SELECT 명령 사용 권한이 없으므로 에러 발생
--SQL>SELECT * FROM SCOTT.DEPT;
KIM 계정이 객체 권한을 부여받은 후 SCOTT 스키마의 존재하는 DEPT 테이블의 모든 부서정보 검색 -SQLPLUS 사용 : 검색 가능
SELECT * FROM SCOTT.DEPT;
--다른 계정에게 부여한 객체 권한 확인 - USER_TAB_PRIVS_MADE : 객체 권한을 부여한 정보를 제공하는 딕셔너리
SELECT * FROM USER_TAB_PRIVS_MADE;
--다른 계정에게 부여한 객체 권한 확인 - USER_TAB_PRIVS_RECD :
SELECT * FROM USER_TAB_PRIVS_RECD;
: 관리자가 계정의 시스템 권한을 보다 효율적으로 부여하거나 회수하기 위해 사용하는 시스템 권한 그룹
관리자가 LEE 계정에게 CONNECT와 RESOURCE 롤 부여 - 관리자 접속 세션
-- LEE 계정이 없는 경우 시스템 권한 부여시 자동 생성 : 비밀번호 설정
--GRANT CONNECT,RESOURCE TO LEE IDENTIFIED BY 5678;
: SQL에 없는 변수 선언,선택 처리,반복 처리 기능을 제공하는 언어
세부분의 영역으로 구분하여 PL/SQL 작성
1.DECLARE 영역(선언부) : DECLARE - 선택
2.EXECUTABLE 영역(실행부) : BEGIN - 필수
3.EXCEPTION 영역(예외처리부) : EXCEPTION - 선택
영역에서 하나의 명령을 구분하기 위해 ; 사용
마지막 영역은 END 키워드로 마무리 후 ; 사용
PL/SQL 실행을 위해 마지막에 /를 사용
메세지를 출력할 수 있도록 세션의 환경변수 설정값 변경
SET SERVEROUT ON;
메세지를 출력하는 함수 : PL/SQL 실행부에서 호출하여 사용
형식)DBMS_OUTPUT.PUT_LINE(출력메세지)
간단한 메세지를 출력하는 PL/SQL 작성
BEGIN
DBMS_OUTPUT.PUT_LINE('HELLO, ORACLE!!!');
END;
/
숫자값 100 NUMBER
문자값 'AAA' VARCHAR2
날짜값 '00/12/13' DATE
변수 선언과 초기값 입력 - 변수 선언은 선언부
형식)변수명 [CONSTANT] 자료형 [NOT NULL][{:=|DEFAULT} 표현식]
CONSTANT : 변수에 저장된 초기값을 변경하지 못하도록 설정하는 키워드 - 상수 선언
NOT NULL : 변수에 NULL 저장 불가능
:= : 대입연산자
표현식 : 변수에 저장되는 값에 대한 표현 방법 - 값,변수(저장값),연산식(결과값),함수(반환값)
선언된 변수의 저장값 저장 - 실행부
형식)변수명 := 표현식
스칼라 변수 : 직접 오라클 자료형을 이용하여 변수 선언
스칼라 변수를 선언하여 값을 저장하고 화면에 변수값을 출력하는 PL/SQL 작성
DECLARE
VEMPNO NUMBER(4) := 7788;
VENAME VARCHAR2(20) := 'SCOTT';
BEGIN
DBMS_OUTPUT.PUT_LINE('사원번호 / 사원아름');
DBMS_OUTPUT.PUT_LINE('--------------------------------');
DBMS_OUTPUT.PUT_LINE(VEMPNO||' / '||VENAME);
DBMS_OUTPUT.PUT_LINE('--------------------------------');
VEMPNO := 7893;
VENAME := 'KING';
DBMS_OUTPUT.PUT_LINE(VEMPNO||' / '||VENAME);
END;
/
레코드 변수 : 테이블 행에 대한 모든 컬럼값을 저장하기 위한 변수 - VO 클래스
형식)레코드변수 레코드타입명
- 레코드 변수를 선언하기 전에 레코드 변수에 대한 자료형(테이블 타입) 선언
형식)TYPE 레코드타입명 IS RECORD(필드명 {자료형|변수명%TYPE|테이블명.컬럼명%TYPE} [NOT NULL][{:=|DEFAULT} 표현식],필드명 {자료형|변수명%TYPE|테이블명.컬럼명%TYPE} [NOT NULL][{:=|DEFAULT} 표현식],...)
레코드 변수 사용방법
형식)레코드변수.필드명
다른 변수와 달리 여러 값 한번에 저장할 수 있어 편하다
--EMP 테이블의 사원번호,사원이름,업무,급여,부서번호를 저장할 수 있는 레코드 변수를 선언하고 EMP 테이블에서 사원번호가
--7844인 사원의 사원번호,사원이름,업무,급여,부서번호를 검색하여 레코드 변수에 저장 후 화면에 출력하는 PL/SQL 작성
DECLARE
/* 레코드 타입 선언 */
TYPE EMP_RECORD_TYPE IS RECORD(VEMPNO EMP.EMPNO%TYPE,VENAME EMP.ENAME%TYPE,VJOB EMP.JOB%TYPE
,VSAL EMP.SAL%TYPE,VDEPTNO EMP.DEPTNO%TYPE);
/* 레코드 변수 선언 */
EMP_RECORD EMP_RECORD_TYPE;
BEGIN
/* 검색행의 컬럼값을 레코드 변수의 필드에 저장 */
SELECT EMPNO,ENAME,JOB,SAL,DEPTNO INTO EMP_RECORD.VEMPNO,EMP_RECORD.VENAME,EMP_RECORD.VJOB,
EMP_RECORD.VSAL,EMP_RECORD.VDEPTNO FROM EMP WHERE EMPNO=7844;
DBMS_OUTPUT.PUT_LINE('사원번호 = '||EMP_RECORD.VEMPNO);
DBMS_OUTPUT.PUT_LINE('사원이름 = '||EMP_RECORD.VENAME);
DBMS_OUTPUT.PUT_LINE('업무 = '||EMP_RECORD.VJOB);
DBMS_OUTPUT.PUT_LINE('급여 = '||EMP_RECORD.VSAL);
DBMS_OUTPUT.PUT_LINE('부서번호 = '||EMP_RECORD.VDEPTNO);
DBMS_OUTPUT.PUT_LINE('--------------------------------');
END;
/
레코드 타입 없이 테이블의 행을 이용하여 래코드 변수 선언 가능
-> 레코드 변수의 필드명과 자료형은 테이블의 컬럼명과 자료형을 이용하여 생성
형식)레코드변수 테이블명%ROWTYPE
--EMP 테이블의 사원번호,사원이름,업무,급여,부서번호를 저장할 수 있는 레코드 변수를 선언하고 EMP 테이블에서 사원번호가 7844인 사원의
--사원번호,사원이름,업무,급여,부서번호를 검색하여 레코드 변수에 저장 후 화면에 출력하는 PL/SQL 작성
DECLARE
EMP_RECORD EMP%ROWTYPE;
BEGIN
/* 검색행(단일행)의 모든 컬럼값을 레코드 변수의 동일 이름의 필드에 자동 저장 */
SELECT * INTO EMP_RECORD FROM EMP WHERE EMPNO=7844;
DBMS_OUTPUT.PUT_LINE('사원번호 = '||EMP_RECORD.EMPNO);
DBMS_OUTPUT.PUT_LINE('사원이름 = '||EMP_RECORD.ENAME);
DBMS_OUTPUT.PUT_LINE('업무 = '||EMP_RECORD.JOB);
DBMS_OUTPUT.PUT_LINE('급여 = '||EMP_RECORD.SAL);
DBMS_OUTPUT.PUT_LINE('부서번호 = '||EMP_RECORD.DEPTNO);
END;
/