C:\Users\Administrator\Desktop\src
unique 제약조건을 사용하면 index가 자동 생성된다.
rowid
b트리 인덱스 구조
커넥트, 리소스 롤
-> 많은 권한 설정을 묶어서 지정해준다.
동의어(시노님)
비공개 동의어
공개 동의어
PL/SQL(Procedural Language)
기본 구조
선언부(DECLARE SECTION)
실행부(EXECUTABLE SECTION)
예외 처리부(EXCEPTION SECTION)
특징
DML 명령을 지원합니다.
변수, 반복,조건 문, 을 사용할수 있다
변수 := 데이터;
스칼라변수, 레퍼런스 변수
책정리 p478~484,259,486,490,498,500,502,518,536,548,549,552,555,558,560,563,565,567,570,572
loop
while lopp
예제)
SELECT *
FROM USER_IND_COLUMNS
WHERE TABLE_NAME = 'EMPLOYEES'
DESC EMPLOYEES
CREATE TABLE EMP_1
AS SELECT * FROM employees
DESC EMP_1
SELECT * FROM USER_CONSTRAINTS
WHERE TABLE_NAME IN ('EMPLOYEES', 'EMP_1')
// NOT NULL 제약 조건을 제외한 제약조건들은 테이블을 복사하여도 적용되지 않는다.
계정생성 (sql plus)
CREATE USER test
IDENTIFIED BY test
GRANT CREATE SESSION TO test;
GRANT CREATE TABLE TO test;
GRANT CONNECT, RESOURCE TO test
========오후 ==========
Hello world
SET SERVEROUTPUT ON
BEGIN
DBMS_OUTPUT.PUT_LINE ('HELLO WORLD.');
END;
DECLARE
VEMPNO NUMBER;
exam01
VNAME VARCHAR2(10);
BEGIN
VEMPNO := 100;
SELECT first_name INTO VNAME
FROM employees
WHERE employee_id = VEMPNO;
DBMS_OUTPUT.PUT_LINE (VEMPNO ||'번 사원의 이름은 '|| VNAME ||'입니다.');
END;
/
exam02
DECLARE
--스칼라변수
VEMPNO NUMBER;
--레퍼런스 변수
VEMPNO employees.employee_id%TYPE;
VNAME VARCHAR2(10);
BEGIN
VEMPNO := 100;
SELECT first_name INTO VNAME
FROM employees
WHERE employee_id = VEMPNO;
DBMS_OUTPUT.PUT_LINE (VEMPNO ||'번 사원의 이름은 '|| VNAME ||'입니다.');
END;
/
exam03
DECLARE
--스칼라변수 VEMPNO NUMBER;
--레퍼런스 변수 :%TYPE
VEMPNO employees.employee_id%TYPE;
/* VNAME VARCHAR2(10);
*/
--레퍼런스변수 %ROWTYPE
VEMP employees%ROWTYPE;
BEGIN
VEMPNO := 100;
/*
SELECT first_name INTO VNAME
FROM employees
WHERE employee_id = VEMPNO;
DBMS_OUTPUT.PUT_LINE (VEMPNO ||'번 사원의 이름은 '|| VNAME
||'입니다.');
*/
SELECT * INTO VEMP
FROM employees
WHERE employee_id = VEMPNO;
DBMS_OUTPUT.PUT_LINE (VEMPNO ||'번 사원의 이름은 ' || VEMP.first_name
|| ', 급여는 ' || VEMP.salary || ', 입사일자는'||
VEMP.hire_date || '입니다.');
END;
/
exam04
/*
100번 사원의 급여가 5000미만인 경우에는 '하'
15000미만인 경우에는 '중'
그이상인 경우에는 '상'등급으로 출력하시오
출력결과
100번 사원의 이름은 , 급여는 , 급여등급은 입니다.
*/
DECLARE
VEMP employees%ROWTYPE;
VDNAME VARCHAR2(14);
BEGIN
SELECT * INTO VEMP
FROM employees
WHERE employee_id = 100;
IF (VEMP.salary < 5000) THEN
VDNAME := '하';
ELSIF (VEMP.salary < 15000) THEN
VDNAME := '중';
ELSIF (VEMP.salary >= 15000) THEN
VDNAME := '상';
END IF;
DBMS_OUTPUT.PUT_LINE('100번 사원의 이름은' || VEMP.first_name ||', 급여는 '|| VEMP.salary ||', 급여등급은 '|| VDNAME ||' 입니다.');
END;
exam05
/*kitri04문장을 5번 출력하시오*/
/*
DECLARE
msg VARCHAR2(20);
BEGIN
msg := 'KITRI04';
DBMS_OUTPUT.PUT_LINE( msg );
DBMS_OUTPUT.PUT_LINE( msg );
DBMS_OUTPUT.PUT_LINE( msg );
DBMS_OUTPUT.PUT_LINE( msg );
DBMS_OUTPUT.PUT_LINE( msg );
end;
*/
/* LOOP */
/*
DECLARE
msg VARCHAR2(20);
cnt number :=1;
BEGIN
msg := 'KITRI04';
LOOP
DBMS_OUTPUT.PUT_LINE(msg);
cnt := cnt+1;
IF cnt > 5 THEN
exit;
END IF;
END LOOP;
END;
/
*/
/* WHILE LOOP*/
/*
DECLARE
msg VARCHAR2(20);
cnt NUMBER :=1;
BEGIN
msg := 'kitri04';
WHILE cnt <= 5 LOOP
DBMS_OUTPUT.PUT_LINE(msg);
cnt := cnt+1;
END LOOP;
END;
*/
/* FOR LOOP*/
DECLARE
msg VARCHAR2(20);
BEGIN
msg := 'kitri04';
FOR cnt
IN 1..5
LOOP DBMS_OUTPUT.PUT_LINE(msg);
END LOOP;
END;
exam06
/* 1~30사이 숫자중 홀수들만 출력하시오. */
/*
DECLARE
VNUM NUMBER :=1;
BEGIN
LOOP
IF(MOD(VNUM,2)=1)
THEN
DBMS_OUTPUT.PUT_LINE(VNUM);
END IF;
VNUM := VNUM+1;
EXIT WHEN VNUM=30;
END LOOP;
END;
/
*/
/* WHILE LOOP */
DECLARE
VNUM NUMBER :=1;
BEGIN
WHILE VNUM < 30 LOOP
IF(MOD(VNUM,2)=1) THEN
DBMS_OUTPUT.PUT_LINE(VNUM);
END IF;
VNUM := VNUM+1;
END LOOP;
END;
/