본문 바로가기

디버깅/Oracle

160405

반응형

C:\Users\Administrator\Desktop\src

unique 제약조건을 사용하면 index가 자동 생성된다.

rowid


b트리 인덱스 구조


커넥트, 리소스 롤

-> 많은 권한 설정을 묶어서 지정해준다.


동의어(시노님)

  1. 비공개 동의어

  2. 공개 동의어


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;

/







반응형

'디버깅 > Oracle' 카테고리의 다른 글

160407  (0) 2016.04.09
160406  (0) 2016.04.09
060404  (0) 2016.04.09
160401  (0) 2016.04.09
160331  (0) 2016.04.09