(Microsoft Word - PLSQL\300\314\266\365.doc)

Size: px
Start display at page:

Download "(Microsoft Word - PLSQL\300\314\266\365.doc)"

Transcription

1 오라클 PL/SQL 제를다른홈페이지에기재할경우에는출처를꼭밝혀주세요. ( 1 PL/SQL 의개요 1.1 PLSQL 이란? [ 2002/01/20 ] 1.2 PL/SQL Block 구조 [ 2002/05/09 ] 1.3 PL/SQL 블럭의유형 [ 2002/05/09 ] 2 프로시저 (PROCEDURE) 와함수 (FUNCTION) 2.1 프로시저 (PROCEDURE) [ 2002/01/20 ] 2.2 함수 (FUNCTION) [ 2002/01/20 ] 3 PL/SQL 데이터타입 3.1 스칼라데이터타입 [ 2002/01/20 ] 3.2 복합데이터타입 3.3 %ROWTYPE [ 2002/01/20 ] 3.4 PL/SQL 테이블 [ 2002/01/20 ] 3.5 PLSQL 레코드 [ 2002/01/20 ] 3.6 PL/SQL Table of Record [ 2002/01/20 ] 4 PL/SQL 내의 SQL 문 4.1 INSERT [ 2002/01/20 ] 4.2 UPDATE [ 2002/01/20 ] 4.3 DELETE [ 2002/01/20 ] 5 PL/SQL 제어문 5.1 반복제어 FOR LOOP [ 2002/01/20 ] LOOP 문, WHILE 문 [ 2002/01/20 ] 5.2 조건제어 (IF) [ 2002/01/20 ] 6 SQL 커서 6.1 암시적커서 (Implicit Cursor) [ 2002/01/20 ] 6.2 명시적커서 (Explicit Cursor) 7 예외절처리 Explicit Cursor [ 2002/01/20 ] FOR 문에서커서사용 (Cursor FOR Loops) [ 2002/01/20 ] 명시적커서의속성 (Explicit Cursor Attributes) [ 2002/01/20 ] 파라미터가있는커서 (Cursors with Parameters) [ 2002/01/20 ] The WHERE CURRENT OF Clause [ 2002/01/20 ] PL/SQL 1

2 7.1 예외 (Exception) [ 2002/01/20 ] 7.2 미리정의된예외 (Predefined Exceptions) [ 2002/01/20 ] 7.3 미리정의되지않은예외 (Non-Predefined Exception) [ 2002/01/20 ] 7.4 사용자정의예외 (User-Defined Exceptions) [ 2002/01/20 ] 7.5 SQLCODE, SQLERRM [ 2002/01/20 ] 8 Package( 패키지 ) [ 2002/01/20 ] 9 Trigger( 트리거 ) [ 2002/01/20 ] PL/SQL 2

3 PL/SQL 이란? - PL/SQL 은 Oracle's Procedural Language extension to SQL. 의약자입니다. - SQL 문장에서변수정의, 조건처리 (IF), 반복처리 (LOOP, WHILE, FOR) 등을지원하며, 오라클자체에내장되어있는 Procedure Language 입니다 - DECLARE 문을이용하여정의되며, 선언문의사용은선택사항입니다. - PL/SQL 문은블록구조로되어있고 PL/SQL 자신이컴파일엔진을가지고있습니다. PL/SQL 의장점 - PL/SQL 문은 BLOCK 구조로다수의 SQL 문을한번에 ORACLE DB 로보내서처리하므로수행속도를향상시킬수있습니다. - PL/SQL 의모든요소는하나또는두개이상의블록으로구성하여모듈화가가능하다. - 보다강력한프로그램을작성하기위해서큰블록안에소블럭을위치시킬수있습니다. - Variable, Constant, Cursor, Exception 을정의하고, SQL 문장과 Procedural 문장에서사용합니다. - 단순, 복잡한데이터형태의변수를선언합니다. - 테이블의데이터구조와 DataBase 의컬럼럼에준하여동적으로변수를선언할수있습니다. - Exception 처리루틴을이용하여 Oracle Server Error 를처리합니다. - 사용자정의에러를선언하고 Exception 처리루틴으로처리가능합니다. PL/SQL Block Structure - PL/SQL 은프로그램을논리적인블록으로나누는구조화된블록언어입니다. - PL/SQL 블록은선언부 ( 선택적 ), 실행부 ( 필수적 ), 예외처리부 ( 선택적 ) 로구성되어있고, 과 END 키워드는반드시기술해주어야합니다. - PL/SQL 블록에서사용하는변수는블록에대해논리적으로선언할수있고사용할수있습니다. Declarative Section( 선언부 ) - 변수, 상수, CURSOR, USER_DEFINE Exception 선언 Executable Section( 실행부 ) - SQL, 반복분, 조건문실행 - 실행부는 으로시작하고 END 로끝납니다. - 실행문은프로그램내용이들어가는부분으로서필수적으로사용되어야합니다. Exception Handling Section( 예외처리 ) - 예외에대한처리. - 일반적으로오류를정의하고처리하는부분으로선택사항입니다. PL/SQL 3

4 DECLARE - Optional - Variables, cursors, user-defined exceptions - Mandatory - SQL Statements - PL/SQL Statements EXCEPTION - Actions to perform when errors occur END; - Mandatory PL/SQL 프로그램의작성요령 - PL/SQL 블록내에서는한문장이종료할때마다세미콜론 (;) 을사용합니다.. - END 뒤에 ; 을사용하여하나의블록이끝났다는것을명시합니다. - PL/SQL 블록의작성은편집기를통해파일로작성할수도있고, SQL 프롬프트에서바로작성할수도있습니다. - SLQ*PLUS 환경에서는 DELCLARE 나 이라는키워드로 PL/SQL 블럭이시작하는것을알수있습니다. - 단일행주석 : -- - 여러행주석 : /* */ - PL/SQL 블록은행에 / 가있으면종결됩니다. PL/SQL 4

5 프로시져란.. - 특정작업을수행할수있고, 이름이있는 PL/SQL 블록으로서. 매개변수를받을수있고.. 반복적으로사용할수있는거죠.. 보통연속실행또는구현이복잡한트랜잭션을수행하는 PL/SQL 블록을데이터베이스에저장하기위해생성합니다. CREATE OR REPLACE 구문을사용하여생성합니다. IS 로 PL/SQL 의블록을시작합니다. LOCAL 변수는 IS 와 사이에선언합니다. [Syntax] CREATE OR REPLACE procedure name IS IN argument OUT argument IN OUT argument [ 변수의선언 ] --> 필수 [PL/SQL Block] -- SQL 문장, PL/SQL 제어문장 [EXCEPTION] --> 선택 -- error 가발생할때수행하는문장 END; --> 필수 프로시저작성예제 SQL>CREATE OR REPLACE PROCEDURE update_sal /* IN Parameter */ (v_empno IN NUMBER) IS UPDATE emp SET sal = sal * 1.1 WHERE empno = v_empno; COMMIT; END update_sal; / 프로시져가생성되었습니다. PL/SQL 5

6 설명.. 프로시저의이름은 update_sal 이고.. 프로시저 update_sal 은사번 (v_empno) 를입력받아서급여를 update 시켜주는 sql 문입니다. 프로시저를끝마칠때에는항상 "/" 를지정합니다. 프로시저의실행 EXECUTE 문을이용해프로시저를실행합니다. SQL> execute update_sal(7369); PL/SQL 처리가정상적으로완료되었습니다 번사원의급여가 10% 인상됐습니다. SELECT 문을실행시켜보면데이터가수정된것을확인할수있습니다. Parameter 란 실행환경과 program 사이에값을주고받는역할을합니다. 블록안에서의변수와똑같이일시적으로값을저장하는역할을합니다. Parameter 의타입 - IN : 실행환경에서 program 으로값을전달 - OUT : program 에서실행환경으로값을전달 - INOUT : 실행환경에서 program 으로값을전달하고, 다시 program 에서실행환경으로변경된값을전달 PL/SQL 6

7 Block Type(PL/SQL 블럭의유형 ) [ Anonymous ] [ Procedure ] [ Function ] Anonymous Block( 익명블록 ) 이름이없는블록을의미합니다. 실행하기위해프로그램안에서선언되고실행시에실행을위해 PL/SQL 엔진으로전달됩니다. 선행컴파일러프로그램과 SQL*Plus 또는서버관리자에서익명의블록을내장할수있습니다. Procedure( 프로시저 ) 특정작업을수행할수있는이름이있는 PL/SQL 블록으로서. 매개변수를받을수있고.. 반복적으로사용할수있는거죠.. 보통연속실행또는구현이복잡한트랜잭션을수행하는 PL/SQL블록을데이터베이스에저장하기위해생성합니다. Function( 함수 ) 보통값을계산하고결과값을반환하기위해서함수를많이사용합니다. 대부분구성이프로시저와유사하지만 IN 파라미터만사용할수있고, 반드시반환될값의데이터타입을 RETURN 문에선언해야합니다. 또한 PL/SQL 블록내에서 RETURN 문을통해서반드시값을반환해야합니다. PL/SQL 7

8 함수 (Function) - 보통값을계산하고결과값을반환하기위해서함수를많이사용합니다. - 대부분구성이프로시저와유사하지만 IN 파라미터만사용할수있습니다. - 반드시반환될값의데이터타입을 RETURN 문에선언해야합니다. - 또한 PL/SQL 블록내에서 RETURN 문을통해서반드시값을반환해야합니다. [Syntax] CREATE OR REPLACE FUNCTION function name [(argument...)] RETURN datatype IS -- Datatype 은반환되는값의 datatype 입니다. [ 변수선언부분 ] [PL/SQL Block] -- PL/SQL 블록에는적어도한개의 RETURN 문이있어야합니다. -- PL/SQL Block 은함수가수행할내용을정의한몸체부분입니다. END; PL/SQL 8

9 SQL> CREATE OR REPLACE FUNCTION FC_update_sal (v_empno IN NUMBER) -- 리턴되는변수의데이터타입을꼭정의해야합니다 RETURN NUMBER. IS v_sal emp.sal%type; UPDATE emp SET sal = sal * 1.1 WHERE empno = v_empno; COMMIT; SELECT sal INTO v_sal FROM emp WHERE empno = v_empno; -- 리턴문이꼭존재해야합니다 RETURN v_sal; END; 함수가생성되었습니다. 설명.. 이함수에는 v_sal 이라는 %type 변수가사용되고있습니다. 스칼라데이터타입을참고하세요. 프로지저와마찬가지로세미콜론 (;) 으로블록을종료한뒤 "/" 를붙여코드를끝마칩니다. 함수의실행먼저함수의반환값을저장할변수를선언합니다. SQL> VAR salary NUMBER; EXECUTE 문을이용해함수를실행합니다. SQL>EXECUTE :salary := FC_update_sal(7900); PL/SQL 처리가정상적으로완료되었습니다. 오라클 SQL 에서선언된변수의출력은 PRINT 문을사용합니다. PRINT 문으로함수의반환값을저장한 salary 의값을확인하면됩니다. SQL>PRINT salary; SALARY 결과가이렇게나옵니다. PL/SQL 9

10 변수선언방법 [Syntax] Identifier 의이름은 sql 의 object 명과동일한규칙을따릅니다. Identifier 를상수로지정하고싶은경우는 CONSTANT 라는 KEYWORD 를명시하고반드시초기화를할당합니다. NOT NULL 이정의되어있으면초기값을반드시지정하고, 정의되어있지않을때는생략가능합니다. 초기값은할당연산자 (:=) 를사용하여정의합니다. 초기값을정의하지않으면 Identifier 는 NULL 값을가지게됩니다. 일반적으로한줄에한개의 Identifier 를정의합니다. 스칼라데이터타입은단수데이터형으로한가지의데이터값만가집니다. BINARY_INTEGER NUMBER[(P, S)] 에서 사이의정수 고정및부동소숫점수에대한기본유형 CHAR[( 최대길이 )] 고정길이문자에대한기본형은 바이트까지입니다. 지정하지않는다면디폴트길이는 1 로설정됩니다. LONG 고정길이문자에대한기본형은 바이트까지입니다. LONG 데이터베이스열의최대폭은 바이트입니다. LONG RAW 이진데이터와바이트문자열에대한기본형은 32760Byte 까지입니다. LONG RAW 데이터는 PL/SQL 에의해해석되지않습니다. VARCHAR2( 최대길이 ) 3 변수길이문자데이터에데한기본형은 32767Byte 까지입니다. VARCHAR2 변수와상수에대한디폴트크기는없습니다. DATE BOOLEAN 날짜와시간에대한기본형. DATE 값은지정이후의초단위로날에대한시간을포함합니다. 날짜의범위는 BC 4712 년 1 월 1 일부터 AD 9999 년 12 월 31 일사이입니다. 논리연산에사용되는세가지값 (TRUE, FALSE, NULL) 중하나를저장하는데이터유형 PL/SQL 10

11 선언예제 v_price CONTANT NUMBER(4,2) := ; -- 상수숫자선언 ( 변할수없다 ) v_name VARCHAR22(20) ; v_bir_type CHAR(1) ; v_flag BOOLEAN NOT NULL := TRUE ; -- NOT NULL 값 TRUE 로초기화 v_birthday DATE; %TYPE 데이터형 %TYPE 데이터형은기술한데이터베이스테이블의컬럼데이터타입을모를경우사용할수있고, 또. 코딩이후데이터베이스컬럼의데이터타입이변경될경우다시수정할필요가없습니다. 이미선언된다른변수나데이터베이스컬럼의데이터타입을이용하여선언합니다. 데이터베이스테이블과컬럼그리고이미선언한변수명이 %TYPE 앞에올수있습니다. %TYPE 속성을이용하여얻을수있는장점 - 기술한 DB column definition 을정확히알지못하는경우에사용할수있습니다. - 기술한 DB column definition 이변경되어도다시 PL/SQL 을고칠필요가없습니다. 예제 v_empno emp.empno%type := 7900 ; v_ename emp.ename%type; PL/SQL 11

12 예제프로시져.. SQL>CREATE OR REPLACE PROCEDURE Emp_Info ( p_empno IN emp.empno%type ) IS -- %TYPE 데이터형변수선언 v_empno emp.empno%type; v_ename emp.ename%type; v_sal emp.sal%type; DBMS_OUTPUT.ENABLE; -- %TYPE 데이터형변수사용 SELECT empno, ename, sal INTO v_empno, v_ename, v_sal FROM emp WHERE empno = p_empno ; -- 결과값출력 DBMS_OUTPUT.PUT_LINE( ' 사원번호 : ' v_empno ); DBMS_OUTPUT.PUT_LINE( ' 사원이름 : ' v_ename ); DBMS_OUTPUT.PUT_LINE( ' 사원급여 : ' v_sal ); END; / 프로시져가생성되었습니다. SQL>SET SERVEROUTPUT ON; -- DBMS_OUTPUT 결과값을화면에출력하기위해 실행결과 SQL> EXECUTE Emp_Info(7369); 사원번호 : 7369 사원이름 : SMITH 사원급여 : 880 PL/SQL 처리가정상적으로완료되었습니다. PL/SQL 12

13 복합데이터타입 하나이상의데이터값을갖는데이터타입으로배열과비슷한역할을하고재사용이가능합니다. %ROWTYPE 데이터형과, PL/SQL 테이블과레코드가복합데이터타입에속합니다. %ROWTYPE 테이블이나뷰내부의컬럼데이터형, 크기, 속석등을그대로사용할수있습니다. %ROWTYPE 앞에오는것은데이터베이스테이블이름입니다. 지정된테이블의구조와동일한구조를갖는변수를선언할수있습니다. 데이터베이스컬럼들의수나 DATATYPE 을알지못할때편리합니다. 테이블의데이터컬럼의 DATATYPE 이변경될경우프로그램을재수정할필요가없습니다. %ROWTYPE 예제프로시져.. SQL>CREATE OR REPLACE PROCEDURE RowType_Test ( p_empno IN emp.empno%type ) IS v_emp emp%rowtype ; DBMS_OUTPUT.ENABLE; -- %ROWTYPE 변수사용 SELECT empno, ename, hiredate INTO v_emp.empno, v_emp.ename, v_emp.hiredate FROM emp WHERE empno = p_empno; DBMS_OUTPUT.PUT_LINE( ' 사원번호 : ' v_emp.empno ); DBMS_OUTPUT.PUT_LINE( ' 사원이름 : ' v_emp.ename ); DBMS_OUTPUT.PUT_LINE( ' 입사일 : ' v_emp.hiredate ); END; / 프로시져가생성되었습니다. 실행결과 SQL> SET SERVEROUTPUT ON ; -- DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 SQL> EXECUTE RowType_Test(7900); 사원번호 : 7900 사원이름 : JAMES 입사일 : 81/12/03 PL/SQL 처리가정상적으로완료되었습니다. PL/SQL 13

14 PL/SQL 테이블 PL/SQL 에서의테이블은오라클 SQL 에서의테이블과는다릅니다. PL/SQL 에서의테이블은일종의일차원배열이라고생각하시면이해하기쉬울겁니다. 테이블은크기에제한이없으면그 ROW 의수는데이터가들어옴에따라자동증가합니다. BINARY_INTEGER 타입의인덱스번호로순서가정해집니다. 하나의테이블에한개의컬럼데이터를저장합니다. 예제 TYPE prdname_table IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER; -- prdname_table 테이블타입으로 prdname_tab 변수를선언해서사용 prdname_tab prdname_table ; PL/SQL 14

15 PL/SQL 테이블예제프로시져.. SQL>CREATE OR REPLACE PROCEDURE Table_Test (v_deptno IN emp.deptno%type) IS TYPE empno_table IS TABLE OF emp.empno%type INDEX BY BINARY_INTEGER; TYPE ename_table IS TABLE OF emp.ename%type INDEX BY BINARY_INTEGER; TYPE sal_table IS TABLE OF emp.sal%type INDEX BY BINARY_INTEGER; -- 테이블타입으로변수를선언해서사용 empno_tab empno_table ; ename_tab ename_table ; sal_tab sal_table; i BINARY_INTEGER := 0; DBMS_OUTPUT.ENABLE; FOR emp_list IN(SELECT empno, ename, sal FROM emp WHERE deptno = v_deptno) LOOP /* emp_list 는자동선언되는 BINARY_INTEGER 형변수로 1 씩증가합니다. emp_list 대신다른문자열사용가능 */ i := i + 1; -- 테이블변수에검색된결과를넣습니다 empno_tab(i) := emp_list.empno ; ename_tab(i) := emp_list.ename ; sal_tab(i) := emp_list.sal ; END LOOP; -- 1 부터 i 까지 FOR 문을실행 FOR cnt IN 1..i LOOP -- TABLE 변수에넣은값을뿌려줌 DBMS_OUTPUT.PUT_LINE( ' 사원번호 : ' empno_tab(cnt) ); DBMS_OUTPUT.PUT_LINE( ' 사원이름 : ' ename_tab(cnt) ); DBMS_OUTPUT.PUT_LINE( ' 사원급여 : ' sal_tab(cnt) ); END LOOP; END; / PL/SQL 15

16 프로시져가생성되었습니다. 실행결과 SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) SQL> EXECUTE Table_Test(10); 사원번호 : 7782 사원이름 : CLARK 사원급여 : 2450 사원번호 : 7839 사원이름 : KING 사원급여 : 5000 사원번호 : 7934 사원이름 : MILLER 사원급여 : 1300 PL/SQL 처리가정상적으로완료되었습니다. emp 테이블에있는데이터의입력한부서에해당하는사원번호, 사원이름, 사원급여를뿌려주는프로시져입니다 PL/SQL 16

17 PL/SQL 레코드여러개의데이터타입을갖는변수들의집합입니다. 스칼라, RECORD, 또는 PL/SQL TABLE datatype 중하나이상의요소로구성됩니다. 논리적단위로서필드집합을처리할수있도록해줍니다. PL/SQL 테이블과다르게개별필드의이름을부여할수있고, 선언시초기화가가능합니다. 예제 TYPE record_test IS RECORD ( record_empno NUMBER, record_ename VARCHAR2(30), record_sal prd_record NUMBER); record_test; PL/SQL RECORD 예제프로시져.. SQL> CREATE OR REPLACE PROCEDURE Record_Test ( p_empno IN emp.empno%type ) IS TYPE emp_record IS RECORD (v_empno NUMBER, v_ename VARCHAR2(30), v_hiredate DATE ); emp_rec emp_record ; DBMS_OUTPUT.ENABLE; SELECT empno, ename, hiredate INTO emp_rec.v_empno, emp_rec.v_ename, emp_rec.v_hiredate FROM emp WHERE empno = p_empno; END; DBMS_OUTPUT.PUT_LINE( ' 사원번호 : ' emp_rec.v_empno ); DBMS_OUTPUT.PUT_LINE( ' 사원이름 : ' emp_rec.v_ename ); DBMS_OUTPUT.PUT_LINE( ' 입사일 : ' emp_rec.v_hiredate ); / 프로시져가생성되었습니다. 실행결과 SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) SQL> EXECUTE Record_Test(7369); 사원번호 : 7369 사원이름 : SMITH 입사일 : 80/12/17 PL/SQL 처리가정상적으로완료되었습니다. %ROWTYPE 예제와비교해보세요 PL/SQL 17

18 PL/SQL Table of Record PL/SQL TABLE 변수선언과비슷하며데이터타입을 %ROWTYPE 으로선언하면됩니다. PL/SQL TABLE 과 RECORD 의복합기능을합니다. DECLARE TYPE dept_table_type IS TABLE OF dept%rowtype INDEX BY BINARY_INTEGER; -- Each element of dept_table is a record dept_table dept_table_type ; PL/SQL TABLE OF RECORD 예제프로시져.. SQL> CREATE OR REPLACE PROCEDURE Table_Test IS i BINARY_INTEGER := 0; -- PL/SQL Table of Record 의선언 TYPE dept_table_type IS TABLE OF dept%rowtype INDEX BY BINARY_INTEGER; dept_table dept_table_type; / FOR dept_list IN (SELECT * FROM dept) LOOP i:= i+1; dept_table(i).deptno := dept_list.deptno ; dept_table(i).dname := dept_list.dname ; dept_table(i).loc := dept_list.loc ; END LOOP; FOR cnt IN 1..i LOOP DBMS_OUTPUT.PUT_LINE( ' 부서번호 : ' dept_table(cnt).deptno END LOOP; END; ' 부서명 : ' dept_table(cnt).dname ' 위치 : ' dept_table(cnt).loc ); PL/SQL 18

19 실행결과 SQL>set serveroutput on; SQL>exec Table_test; 부서번호 : 10 부서명 : ACCOUNTING 위치 : NEW_YORK 부서번호 : 20 부서명 : RESEARCH 위치 : DALLAS 부서번호 : 30 부서명 : 인사과위치 : CHICAGO 부서번호 : 40 부서명 : OPERATIONS 위치 : BOS%TON PL/SQL 처리가정상적으로완료되었습니다. PL/SQL 19

20 Insert 문 PL/SQL 에서의 INSERT 문은 SQL 과비슷합니다. 사원등록예제프로시져.. SQL> CREATE OR REPLACE PROCEDURE Insert_Test ( v_empno IN emp.empno%type, v_ename IN emp.ename%type, v_deptno IN emp.deptno%type ) IS DBMS_OUTPUT.ENABLE; INSERT INTO emp(empno, ename, hiredate, deptno) VALUES(v_empno, v_ename, sysdate, v_deptno); DBMS_OUTPUT.PUT_LINE( ' 사원번호 : ' v_empno ); DBMS_OUTPUT.PUT_LINE( ' 사원이름 : ' v_ename ); DBMS_OUTPUT.PUT_LINE( ' 사원부서 : ' v_deptno ); DBMS_OUTPUT.PUT_LINE( ' 데이터입력성공 ' ); END ; / 프로시져가생성되었습니다. 실행결과 SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) SQL> EXECUTE Insert_Test(1000, 'brave', 20); 사원번호 : 1000 사원이름 : brave 사원부서 : 20 데이터입력성공 PL/SQL 처리가정상적으로완료되었습니다. PL/SQL 20

21 UPDATE 상품수정예제프로시저.. 특정사원의급여를일정 % 센트인상 / 인하하는프로시져 SQL>CREATE OR REPLACE PROCEDURE Update_Test ( v_empno IN emp.empno%type, -- 급여를수정한사원의사번 v_rate IN NUMBER ) -- 급여의인상 / 인하율 IS v_emp emp%rowtype ; DBMS_OUTPUT.ENABLE; UPDATE emp SET sal = sal+(sal * (v_rate/100)) -- 급여를계산 WHERE empno = v_empno ; DBMS_OUTPUT.PUT_LINE( ' 데이터수정성공 ' ); -- 수정된데이터확인하기위해검색 SELECT empno, ename, sal FROM emp WHERE empno = v_empno ; INTO v_emp.empno, v_emp.ename, v_emp.sal DBMS_OUTPUT.PUT_LINE( ' **** 수정확인 **** '); DBMS_OUTPUT.PUT_LINE( ' 사원번호 : ' v_emp.empno ); DBMS_OUTPUT.PUT_LINE( ' 사원이름 : ' v_emp.ename ); DBMS_OUTPUT.PUT_LINE( ' 사원급여 : ' v_emp.sal ); END ; / 프로시저가생성되었습니다. 프로시저실행 SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) SQL> EXECUTE Update_Test(7900, -10); 데이터수정성공 **** 수정확인 **** 사원번호 : 7900 사원이름 : JAMES 사원급여 : 855 PL/SQL 처리가정상적으로완료되었습니다 번사원의급여를 10% 인하했습니다. PL/SQL 21

22 DELETE 사원삭제예제프로시저.. SQL> CREATE OR REPLACE PROCEDURE Delete_Test ( p_empno IN emp.empno%type ) IS -- 삭제데이터를확인하기레코드선언 TYPE del_record IS RECORD ( v_empno emp.empno%type, v_ename emp.ename%type, v_hiredate emp.hiredate%type) ; v_emp del_record ; DBMS_OUTPUT.ENABLE; -- 삭제된데이터확인용쿼리 SELECT empno, ename, hiredate INTO v_emp.v_empno, v_emp.v_ename, v_emp.v_hiredate FROM emp WHERE empno = p_empno ; DBMS_OUTPUT.PUT_LINE( ' 사원번호 : ' v_emp.v_empno ); DBMS_OUTPUT.PUT_LINE( ' 사원이름 : ' v_emp.v_ename ); DBMS_OUTPUT.PUT_LINE( ' 입사일 : ' v_emp.v_hiredate ); -- 삭제쿼리 DELETE FROM emp WHERE empno = p_empno ; DBMS_OUTPUT.PUT_LINE( ' 데이터삭제성공 ' ); END; / 프로시저가생성되었습니다. 프로시저실행 ( 결과화면 ) SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) SQL> EXECUTE Delete_Test(7900); 사원번호 : 7900 사원이름 : JAMES 입사일 : 81/12/03 데이터삭제성공 PL/SQL 처리가정상적으로완료되었습니다 사원을삭제했습니다. PL/SQL 22

23 FOR LOOP 문 - index 는자동선언되는 binary_integer 형변수이고. 1 씩증가합니다. - reverse 옵션이사용될경우 index 는 upper_bound 에서 lower_bound 로 1 씩감소합니다. - IN 다음에는 coursor 나 select 문이올수있습니다. FOR 문예제 DECLARE -- 사원이름을출력하기위한 PL/SQL 테이블선언 TYPE ename_table IS TABLE OF emp.ename%type INDEX BY BINARY_INTEGER; -- 사원급여를출력하기위한 PL/SQL 테이블선언 TYPE sal_table IS TABLE OF emp.sal%type INDEX BY BINARY_INTEGER; ename_tab sal_tab ename_table; sal_table; i BINARY_INTEGER := 0; DBMS_OUTPUT.ENABLE; FOR emp_list IN (SELECT ename, sal FROM emp WHERE deptno = 10) LOOP i := i +1 ; ename_tab(i) := emp_list.ename; -- 테이블에사원이름을저장 sal_tab(i) := emp_list.sal; -- 테이블에사원급여를저장 END LOOP; FOR cnt IN 1..i LOOP -- 화면에출력 DBMS_OUTPUT.PUT_LINE(' 사원이름 : ' ename_tab(cnt)); DBMS_OUTPUT.PUT_LINE(' 사원급여 : ' sal_tab(cnt)); END LOOP; END; / 사원이름 : CLARK 사원급여 : 2450 PL/SQL 23

24 사원이름 : KING 사원급여 : 5000 사원이름 : MILLER 사원급여 : 1300 PL/SQL 처리가정상적으로완료되었습니다. PL/SQL 24

25 Loop 문 while 문 LOOP 문예제 EXIT 문이사용되었을경우, 무조건 LOOP 문을빠져나갑니다, EXITH WHEN 이사용될경우 WHEN 절에 LOOP 를빠져나가는조건을제어할수있습니다. SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) SQL> DECLARE / v_cnt number(3) := 100; DBMS_OUTPUT.ENABLE ; LOOP INSERT INTO emp(empno, ename, hiredate) VALUES(v_cnt, 'test' to_char(v_cnt), sysdate); v_cnt := v_cnt+1; EXIT WHEN v_cnt > 110; END LOOP; DBMS_OUTPUT.PUT_LINE(v_cnt-100 ' 개의데이터가입력되었습니다 '); END; 11 개의데이터가입력되었습니다 PL/SQL 처리가정상적으로완료되었습니다. WHILE LOOP 문 WHILE LOOP 문은 FOR 문과비슷하며조건이 TRUE 일경우만반복되는 LOOP 문입니다. 예제 WHILE cnt < 10 LOOP INSERT INTO emp(empno, ename, hiredate) VALUES(emp_seq.nextval, 'test', sysdate); cnt := cnt + 1 ; END LOOP ; cnt 가 10 이면반복 While Loop 를탈출 EXIT WHEN 조건 => 조건이만족할때반복 loop 를탈출합니다.. PL/SQL 25

26 조건제어 IF 문예제프로시저.. SQL>CREATE OR REPLACE PROCEDURE Dept_Search (p_empno IN emp.empno%type ) IS v_deptno emp.deptno%type ; DBMS_OUTPUT.ENABLE; SELECT deptno INTO v_deptno FROM emp WHERE empno = p_empno ; IF v_deptno <= 7000 THEN DBMS_OUTPUT.PUT_LINE( ' ACCOUNTING 부서사원입니다. ' ); ELSIF v_deptno < 7900 THEN ELSE DBMS_OUTPUT.PUT_LINE( ' RESEARCH 부서사원입니다. ' ); DBMS_OUTPUT.PUT_LINE( ' 부서가없네요... ' ); END IF ; END ; / 프로시저가생성되었습니다. 프로시저실행 SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) SQL> EXECUTE Dept_Search(7900); 부서가없네요... PL/SQL 처리가정상적으로완료되었습니다. SQL> EXECUTE Dept_Search(7369); RESEARCH 부서사원입니다. PL/SQL 처리가정상적으로완료되었습니다. PL/SQL 26

27 암시적인커서는오라클이나 PL/SQL 실행메커니즘에의해처리되는 SQL 문장이처리되는곳에대한익명의에드레스입니다. 오라클데이터베이스에서실행되는모든 SQL 문장은암시적인커서이며그것들과함께모든암시적인커서속성이사용될수있습니다. - 암시적커서의속성 SQL%ROWCOUNT : 해당 SQL 문에영향을받는행의수 SQL%FOUND : 해당 SQL 영향을받는행의수가 1 개이상일경우 TRUE SQL%NOTFOUND : 해당 SQL 문에영향을받는행의수가없을경우 TRUE SQL%ISOPEN : 항상 FALSE, 암시적커서가열려있는지의여부검색 ( 암시적커서는 SQL 문이실행되는순간자동으로열림과닫힘실행 ) 암시적커서예제 CREATE OR REPLACE PROCEDURE Implicit_Cursor (p_empno emp.empno%type) is v_sal emp.sal%type; v_update_row NUMBER; SELECT sal INTO v_sal FROM emp WHERE empno = p_empno ; -- 검색된데이터가있을경우 IF SQL%FOUND THEN DBMS_OUTPUT.PUT_LINE(' 검색한데이터가존재합니다 : ' v_sal); END IF; UPDATE emp SET sal = sal*1.1 WHERE empno = p_empno; -- 수정한데이터의카운트를변수에저장 v_update_row := SQL%ROWCOUNT; DBMS_OUTPUT.PUT_LINE(' 급여가인상된사원수 : ' v_update_row); END; 프로시저가생성되었습니다. 실행결과 SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) SQL> EXECUTE Implicit_Cursor(7369); 검색한데이터가존재합니다 : 880 급여가인상된사원수 : 1 PL/SQL 처리가정상적으로완료되었습니다 PL/SQL 27

28 커서란무엇인가? 명시적커서 (Explicit Cursor) 커서는 Private SQL 의작업영역입니다. 오라클서버에의해실행되는모든 SQL 문은연관된각각의커서를소유하고있습니다. 커서의종류 - 암시적커서 : 모든 DML 과 PL/SQL SELECT 문에대해선언됩니다. - 명시적커서 : 프로그래머에의해선언되며이름이있는커서입니다. Explicit Cursor 의흐름도? 문법 (Syntax) 커서열기 (OPEN) 커서의열기는 OPEN 문을사용합니다. 커서안의검색이실행되며아무런데이터행을추출하지못해도에러가발생하지않습니다. OPEN cursor_name; 커서패치 (FETCH) 커서의 FETCH 는현재데이터행을 OUTPUT 변수에반환합니다. 커서의 SELECT 문의컬럼의수와 OUTPUT 변수의수가동일해야합니다. 커서컬럼의변수의타입과 OUTPUT 변수의데이터타입도동일해야합니다. 커서는한라인씩데이터를패치합니다. FETCH cursor_name INTO variable1, variable2 ; 커서닫기 (CLOSE) 사용을마친커서는반드시닫아주어야합니다. 필요하다면커서를다시열수있습니다. 커서를닫은상태에서 FETCH 를할수없습니다. CLOSE cursor_name; PL/SQL 28

29 Explicit Cursor 예제특정부서의평균급여와사원수를출력.. SQL>CREATE OR REPLACE PROCEDURE ExpCursor_Test (v_deptno dept.deptno%type) IS CURSOR dept_avg IS SELECT b.dname, COUNT(a.empno) cnt, ROUND(AVG(a.sal),3) salary FROM emp a, dept b WHERE a.deptno = b.deptno AND b.deptno = v_deptno GROUP BY b.dname ; -- 커서를패치하기위한변수선언 v_dname dept.dname%type; emp_cnt sal_avg NUMBER; NUMBER; -- 커서의오픈 OPEN dept_avg; -- 커서의패치 FETCH dept_avg INTO v_dname, emp_cnt, sal_avg; DBMS_OUTPUT.PUT_LINE(' 부서명 : ' v_dname); DBMS_OUTPUT.PUT_LINE(' 사원수 : ' emp_cnt); DBMS_OUTPUT.PUT_LINE(' 평균급여 : ' sal_avg); -- 커서의 CLOSE CLOSE dept_avg; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM ' 에러발생 '); END; / PL/SQL 29

30 프로시져가생성되었습니다. 실행결과 SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) SQL> EXECUTE ExpCursor_Test(30); 부서명 : SALES 사원수 : 6 평균급여 : PL/SQL 처리가정상적으로완료되었습니다. PL/SQL 30

31 FOR 문에서커서사용 (Cursor FOR Loops) FOR 문을사용하면커서의 OPEN, FETCH, CLOSE 가자동발생하므로따로기술할필요가없습니다 레코드이름도자동선언되므로따로선언할필요가없습니다. FOR 문에서커서사용예제부서별사원수와급여합계를구하는프로시저입니다. SQL> CREATE OR REPLACE PROCEDURE ForCursor_Test IS CURSOR dept_sum IS SELECT b.dname, COUNT(a.empno) cnt, SUM(a.sal) salary FROM emp a, dept b WHERE a.deptno = b.deptno GROUP BY b.dname; -- Cursor 를 FOR 문에서실행시킨다 FOR emp_list IN dept_sum LOOP DBMS_OUTPUT.PUT_LINE(' 부서명 : ' emp_list.dname); DBMS_OUTPUT.PUT_LINE(' 사원수 : ' emp_list.cnt); DBMS_OUTPUT.PUT_LINE(' 급여합계 : ' emp_list.salary); END LOOP; EXCEPTION WHEN OTHERS THEN END; DBMS_OUTPUT.PUT_LINE(SQLERRM ' 에러발생 '); / 프로시져가생성되었습니다. 실행결과 SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) PL/SQL 31

32 SQL> EXECUTE ForCursor_Test; 부서명 : ACCOUNTING 사원수 : 3 급여합계 : 8750 부서명 : RESEARCH 사원수 : 6 급여합계 : 부서명 : SALES 사원수 : 6 급여합계 : 9305 PL/SQL 처리가정상적으로완료되었습니다. 명시적커서의속성 (Explicit Cursor Attributes) %ISOPEN - 커서가 OPEN 되어있으면 TRUE - %ISOPEN 속성을이용하여커서가열려있는지알수있습니다. %NOTFOUND - 패치한데이터가행을반환하지않으면 TRUE - %NOTFOUND 속성을이용하여루프를종료할시점을찾습니다. %FOUND - 패치한데이터가행을반환하면 TRUE %ROWCOUNT - 현재까지반환된모든데이터행의수 - %ROWCOUNT 속성을이용하여정확한숫자만큼의행을추출합니다. 커서의속성예제 SQL>CREATE OR REPLACE PROCEDURE AttrCursor_Test IS v_empno emp.empno%type; PL/SQL 32

33 v_ename v_sal emp.ename%type; emp.sal%type; / CURSOR emp_list IS SELECT empno, ename, sal FROM emp; DBMS_OUTPUT.ENABLE; OPEN emp_list; LOOP FETCH emp_list INTO v_empno, v_ename, v_sal; -- 데이터를찾지못하면빠져나갑니다 EXIT WHEN emp_list%notfound; END LOOP; DBMS_OUTPUT.PUT_LINE(' 전체데이터수 ' emp_list%rowcount); CLOSE emp_list; EXCEPTION WHEN OTHERS THEN END; DBMS_OUTPUT.PUT_LINE('ERR MESSAGE : ' SQLERRM); 프로시져가생성되었습니다. 실행결과 SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) SQL> EXECUTE AttrCursor_Test; 전체데이터수 15 PL/SQL 처리가정상적으로완료되었습니다. PL/SQL 33

34 파라미터가있는커서 (Cursors with Parameters) 커서가열리고질의가실행되면매개변수값을커서에전달한다. 다른 active set 을원할때마다 explicit 커서를따로선언해야한다 문법 (Syntax) 파라미터가있는커서예제 SQL> CREATE OR REPLACE PROCEDURE ParamCursor_Test (param_deptno emp.deptno%type) IS v_ename emp.ename%type; -- Parameter 가있는커서의선언 CURSOR emp_list(v_deptno emp.deptno%type) IS SELECT ename FROM emp WHERE deptno = v_deptno; DBMS_OUTPUT.ENABLE; DBMS_OUTPUT.PUT_LINE(' ****** 입력한부서에해당하는사람들 ****** '); -- Parameter 변수의값을전달 (OPEN 될때값을전달한다 ) FOR emplst IN emp_list(param_deptno) LOOP DBMS_OUTPUT.PUT_LINE(' 이름 : ' emplst.ename); END LOOP; EXCEPTION WHEN OTHERS THEN END; DBMS_OUTPUT.PUT_LINE('ERR MESSAGE : ' SQLERRM); / 프로시져가생성되었습니다. 실행결과 PL/SQL 34

35 SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) SQL> EXECUTE ParamCursor_Test(10); ****** 입력한부서에해당하는사람들 ****** 이름 : CLARK 이름 : KING 이름 : MILLER PL/SQL 처리가정상적으로완료되었습니다. PL/SQL 35

36 WHERE CURRENT OF - ROWID 를이용하지않고도현재참조하는행을갱신하고삭제할수있게합니다. - 추가적으로 FETCH 문에의해가장최근에처리된행을참조하기위해서 "WHERE CURRENT OF 커서이름 " 절로 DELETE 나 UPDATE 문작성이가능합니다.. - 이절을사용할때참조하는커서가있어야하며, FOR UPDATE 절이커서선언 query 문장안에있어야합니다. 그렇지않으면 error 가발생합니다.. WHERE CURRENT OF 예제 SQL> SET SERVEROUTPUT ON ; -- DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 SQL>CREATE OR REPLACE PROCEDURE where_current IS CURSOR emp_list IS SELECT empno FROM emp WHERE empno = 7934 FOR UPDATE; --DBMS_OUTPUT.PUT_LINE 명령을사용하기위해서 DBMS_OUTPUT.ENABLE; FOR emplst IN emp_list LOOP --emp_list 커서에해당하는사람의직업을 SALESMAN 으로업데이트시킵니다. UPDATE emp SET job = 'SALESMAN' WHERE CURRENT OF emp_list; DBMS_OUTPUT.PUT_LINE(' 수정성공 '); END LOOP; EXCEPTION WHEN OTHERS THEN -- 에러발생시에러메시지출력 DBMS_OUTPUT.PUT_LINE('ERR MESSAGE : ' SQLERRM); END; PL/SQL 36

37 -- 먼저데이터를확인해보세용 SQL> SELECT job FROM emp WHERE empno = 7934; JOB CLERK --PLSQL 을실행시키고.. SQL> EXECUTE where_current; 수정성공 --DBMS_OUTPUT.PUT_LINE 명령으로출력한거.. PL/SQL 처리가정상적으로완료되었습니다. -- 다시데이터를확인하면변경된것을볼수있습니다. SQL> SELECT job FROM emp WHERE empno = 7934; JOB SALESMAN PL/SQL 37

38 예외 (Exception) 란? 오라클 PL/SQL 의오류를예외라고부릅니다. 오류는 PL/SQL 을컴파일할때문법적인오류로발생하는컴파일타임오류와, 프로그램을실행할때발생하는실행타임오류로구분할수있습니다. PL/SQL 오류의종류 예외설명처리 미리정의된오라클서버오류 (Predefined Oracle Server) 미리정의되지않은오라클서버오류 (Non-Predefined Oracle Server) 사용자정의오류 (User- Defined) PL/SQL 에서자주발생하는약 20 개의오류 미리정의된오라클서버오류를제외한모든오류 개발자가정한조건에만족하지않을경우발생하는오류 선언할필요도없고, 발생시에예외절로자동트랩 (Trap) 된다. 선언부에서선언해야하고발생시자동트랩된다. 선언부에서선언하고실행부에서 RAISE 문을사용하여발생시켜야한다 Execption 문법 (Syntax) WHEN OTHERS 절은맨마지막에옵니다. 예외처리절은 EXCEPTION 부터시작합니다. 허용합니다. 예외가발생하면여러개의예외처리부중에하나의예외처리부에트랩 (Trap) 됩니다. PL/SQL 38

39 미리정의된예외 (Predefined Exceptions) 오라클 PL/SQL 은자주일어나는몇가지예외를미리정의해놓았으며, 이러한예외는개발자가따로선언할필요가없습니다. 미리정의된예외의종류? NO_DATA_FOUND : SELECT 문이아무런데이터행을반환하지못할때 TOO_MANY_ROWS : 하나만리턴해야하는 SELECT 문이하나이상의행을반환할때 INVALID_CURSOR : 잘못된커서연산 ZERO_DIVIDE : 0 으로나눌때 DUP_VAL_ON_INDEX : UNIQUE 제약을갖는컬럼에중복되는데이터가 INSERT 될때이외에도몇개가더있습니다. 미리정의된예외예제 SQL> CREATE OR REPLACE PROCEDURE PreException_test IS (v_deptno IN emp.empno%type) v_emp emp%rowtype; DBMS_OUTPUT.ENABLE; SELECT empno, ename, deptno INTO v_emp.empno, v_emp.ename, v_emp.deptno FROM emp WHERE deptno = v_deptno ; DBMS_OUTPUT.PUT_LINE(' 사번 : ' v_emp.empno); DBMS_OUTPUT.PUT_LINE(' 이름 : ' v_emp.ename); DBMS_OUTPUT.PUT_LINE(' 부서번호 : ' v_emp.deptno); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN DBMS_OUTPUT.PUT_LINE(' 데이터가존재합니다.'); DBMS_OUTPUT.PUT_LINE('DUP_VAL_ON_INDEX 에러발생 '); WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('TOO_MANY_ROWS 에러발생 '); WHEN NO_DATA_FOUND THEN PL/SQL 39

40 DBMS_OUTPUT.PUT_LINE('NO_DATA_FOUND 에러발생 '); WHEN OTHERS THEN END; DBMS_OUTPUT.PUT_LINE(' 기타에러발생 '); / 프로시저가생성되었습니다. 프로시저실행 SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) SQL> EXECUTE PreException_Test(20); TOO_MANY_ROWS 에러발생 PL/SQL 처리가정상적으로완료되었습니다. TOO_MANY_ROWS 에러를타는이유? - SELECT 문의결과가 1 개이상의행을리턴하기때문이다.. - TOO_MANY_ROWS 를피하기위해서는 FOR 문이나 LOOP 문으로 SELECT 문을처리해야합니다. 아래와같이바꾸면에러가발생하지않습니다. FOR emp_list IN (SELECT empno, ename, deptno FROM emp WHERE deptno = v_deptno) LOOP DBMS_OUTPUT.PUT_LINE(' 사번 : ' emp_list.empno); DBMS_OUTPUT.PUT_LINE(' 이름 : ' emp_list.ename); DBMS_OUTPUT.PUT_LINE(' 부서번호 : ' emp_list.deptno); END LOOP; PL/SQL 40

41 미리정의되지않은예외 (Non-Predefiend Exceptions) STEP 1 : 예외의이름을선언 ( 선언절 ) STEP 2 : PRAGMA EXCEPTION_INIT 문장으로예외의이름과오라클서버오류번호를결합 ( 선언절 ) STEP 3 : 예외가발생할경우해당예외를참조한다 ( 예외절 ) 미리정의되지않은예외예제 SQL> CREATE OR REPLACE PROCEDURE NonPreException_Test IS not_null_test EXCEPTION; -- STEP 1 /* not_null_test 는선언된예외이름 Error 처리번호는표준 Oracle7 Server Error 번호 */ PRAGMA EXCEPTION_INIT(not_null_test, -1400); -- STEP 2 DBMS_OUTPUT.ENABLE; -- empno 를입력하지않아서 NOT NULL 에러발생 INSERT INTO emp(ename, deptno) VALUES('tiger', 30); EXCEPTION WHEN not_null_test THEN -- STEP 3 DBMS_OUTPUT.PUT_LINE('not null 에러발생 '); END; / PL/SQL 41

42 프로시져가생성되었습니다. 실행결과 SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) SQL> EXECUTE NonPreException_Test; not null 에러발생 PL/SQL 처리가정상적으로완료되었습니다. PL/SQL 42

43 사용자정의예외 (User-Defined Exceptions) 오라클저장함수 RAISE_APPLICATION_ERROR 를사용하여오류코드 부터 의범위내에서사용자정의예외를만들수있습니다. STEP 1 : 예외의이름을선언 ( 선언절 ) STEP 2 : RAISE 문을사용하여직접적으로예외를발생시킨다 ( 실행절 ) STEP 3 : 예외가발생할경우해당예외를참조한다 ( 예외절 ) 사용자정의예외예제 Procedure 입력한부서의사원이 5 명보다적으면사용자정의예외가발생하는예제입니다. SQL>CREATE OR REPLACE PROCEDURE User_Exception (v_deptno IN emp.deptno%type ) IS -- 예외의이름을선언 user_define_error EXCEPTION; -- STEP 1 cnt NUMBER; DBMS_OUTPUT.ENABLE; SELECT COUNT(empno) INTO cnt FROM emp WHERE deptno = v_deptno; IF cnt < 5 THEN -- RAISE 문을사용하여직접적으로예외를발생시킨다 RAISE user_define_error; -- STEP 2 END IF; EXCEPTION -- 예외가발생할경우해당예외를참조한다. WHEN user_define_error THEN -- STEP 3 PL/SQL 43

44 RAISE_APPLICATION_ERROR(-20001, ' 부서에사원이몇명안되네요..'); / END; 프로시져가생성되었습니다. 실행결과 SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) SQL> EXECUTE user_exception(10); user_exception(10); END; * 1 행에오류 : ORA-20001: 부서에사원이몇명안되네요.. ORA-06512: "SCOTT.USER_EXCEPTION", 줄 17 에서 ORA-06512: 줄 1 에서 10 부서의사원이 5 보다적기때문에사용자정의예외가발생했습니다. SQL> EXECUTE user_exception(20); PL/SQL 처리가정상적으로완료되었습니다. 20 부서로실행을하면에러가발생하지않는것을알수있습니다.. PL/SQL 44

45 SQLCODE, SQLERRM WHEN OTHERS 문으로트랩 (Trap) 되는오류들의실제오류코드와설명을볼때사용한다. SQLCODE : 실행된프로그램이성공적으로종료하였을때는오류번호 0 을포함하며, 그렇지못할경우에는해당오류코드번호를포함한다. SQLERRM : SQLCODE 에포함된오라클오류번호에해당하는메시지를가진다. SQLCODE Value Description 0 오류없이성공적으로종료 1 사용자정의예외번호 +100 NO_DATA_FOUND 예외번호음수위에것을제외한오라클서버에러번호 SQLCODE, SQLERRM 예제프로시저 SQL> CREATE OR REPLACE PROCEDURE Errcode_Exception (v_deptno IN emp.deptno%type ) IS v_emp emp%rowtype ; DBMS_OUTPUT.ENABLE; -- ERROR 발생 for 문을돌려야됨 SELECT * INTO v_emp FROM emp WHERE deptno = v_deptno; DBMS_OUTPUT.PUT_LINE(' 사번 : ' v_emp.empno); DBMS_OUTPUT.PUT_LINE(' 이름 : ' v_emp.ename); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('ERR CODE : ' TO_CHAR(SQLCODE)); DBMS_OUTPUT.PUT_LINE('ERR MESSAGE : ' SQLERRM); PL/SQL 45

46 END; / 프로시져가생성되었습니다. 실행결과 SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) SQL> EXECUTE Errcode_Exception(30); RR CODE : ERR MESSAGE : ORA-01422: 실제인출은요구된것보다많은수의행을추출합니다 PL/SQL 처리가정상적으로완료되었습니다. 위와같이 SQLCODE, SQLERRM 을사용하면에러코드와에러메시지를볼수있습니다. PL/SQL 46

47 package? 패키지 (package) 는오라클데이터베이스에저장되어있는서로관련있는 PL/SQL 프로지져와함수들의집합입니다 패키지는선언부와본문두부분으로나누어집니다. 패키지선언부 - 선언절은패키지에포함될 PL/SQL 프로시저나, 함수, 커서, 변수, 예외절을선언합니다. - 패키지선언부에서선언한모든요소들은패키지전체에적용됩니다. - 즉선언부에서선언한변수는 PUBLIC 변수로사용됩니다. 패키지본문 - 패키지본문은패키지에서선언된부분의실행을정의합니다. - 즉실제프로시져나함수의내용에해당하는부분이옵니다. 아주간단한패키지예제입니다. 4 개의프로시저가존재하고있습니다. 프로시저명프로시저기능보기 all_emp_info 모든사원의사원정보 ( 사번, 성명, 입사일 ) 프로시저보기 all_sal_info 모든사원의급여정보 ( 평균급여, 최고급여, 최소급여 ) 프로시저보기 PL/SQL 47

48 dept_emp_info 특정부서의사원정보 ( 사번, 성명, 입사일 ) 프로시저보기 dept_sql_info 특정부서의급여정보 ( 평균급여, 최고급여, 최소급여 ) 프로시저보기 위 4 개의프로시저를가지고패키지를생성하겠습니다. 선언부를먼저생성합니다. package 예제 ( 선언부 ) SQL>CREATE OR REPLACE PACKAGE emp_info AS PROCEDURE all_emp_info; PROCEDURE all_sal_info; PROCEDURE dept_emp_info (v_deptno IN NUMBER) ; PROCEDURE dept_sal_info (v_deptno IN NUMBER) ; END emp_info; Package created. -- 모든사원의사원정보 -- 모든사원의급여정보 -- 특정부서의사원정보 -- 특정부서의급여정보 선언부를생성하고나서본문부분을생성합니다. package 예제 ( 본문 ) SQL>CREATE OR REPLACE PACKAGE BODY emp_info AS -- 모든사원의사원정보 PROCEDURE all_emp_info IS CURSOR emp_cursor IS SELECT empno, ename, to_char(hiredate, 'RRRR/MM/DD') hiredate FROM emp ORDER BY hiredate; FOR aa IN emp_cursor LOOP DBMS_OUTPUT.PUT_LINE(' 사번 : ' aa.empno); DBMS_OUTPUT.PUT_LINE(' 성명 : ' aa.ename); DBMS_OUTPUT.PUT_LINE(' 입사일 : ' aa.hiredate); END LOOP; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM ' 에러발생 '); END all_emp_info; -- 모든사원의급여정보 PROCEDURE all_sal_info PL/SQL 48

49 IS CURSOR emp_cursor IS SELECT round(avg(sal),3) avg_sal, max(sal) max_sal, min(sal) min_sal FROM emp; FOR aa IN emp_cursor LOOP DBMS_OUTPUT.PUT_LINE(' 전체급여평균 : ' aa.avg_sal); DBMS_OUTPUT.PUT_LINE(' 최대급여금액 : ' aa.max_sal); DBMS_OUTPUT.PUT_LINE(' 최소급여금액 : ' aa.min_sal); END LOOP; EXCEPTION WHEN OTHERS THEN END all_sal_info; DBMS_OUTPUT.PUT_LINE(SQLERRM ' 에러발생 '); -- 특정부서의사원정보 PROCEDURE dept_emp_info (v_deptno IN NUMBER) IS CURSOR emp_cursor IS SELECT empno, ename, to_char(hiredate, 'RRRR/MM/DD') hiredate FROM emp WHERE deptno = v_deptno ORDER BY hiredate; FOR aa IN emp_cursor LOOP DBMS_OUTPUT.PUT_LINE(' 사번 : ' aa.empno); DBMS_OUTPUT.PUT_LINE(' 성명 : ' aa.ename); DBMS_OUTPUT.PUT_LINE(' 입사일 : ' aa.hiredate); END LOOP; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM ' 에러발생 '); END dept_emp_info; -- 특정부서의급여정보 PROCEDURE dept_sal_info (v_deptno IN NUMBER) IS CURSOR emp_cursor IS PL/SQL 49

50 SELECT round(avg(sal),3) avg_sal, max(sal) max_sal, min(sal) min_sal FROM emp WHERE deptno = v_deptno; FOR aa IN emp_cursor LOOP DBMS_OUTPUT.PUT_LINE(' 전체급여평균 : ' aa.avg_sal); DBMS_OUTPUT.PUT_LINE(' 최대급여금액 : ' aa.max_sal); DBMS_OUTPUT.PUT_LINE(' 최소급여금액 : ' aa.min_sal); END LOOP; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM ' 에러발생 '); END dept_sal_info; END emp_info; / Package body created. 패키지의실행패키지의실행은패키지명다음에. 을찍고프로시저냐함수명을써줍니다. 먼저 set serveroutput on 을실행한후.. SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) 다음명령들을실행해보세요.. SQL> exec emp_info.all_emp_info; SQL> exec emp_info.all_sal_info; SQL> exec emp_info.dept_emp_info(10); SQL> exec emp_info.dept_sal_info(10); PL/SQL 50

51 트리거란? INSERT, UPDATE, DELETE 문이 TABLE 에대해행해질때묵시적으로수행되는 PROCEDURE 입니다. Trigger 는 TABLE 과는별도로 DATABASE 에저장됩니다. Trigger 는 VIEW 에대해서가아니라 TABLE 에관해서만정의될수있습니다. - BEFORE : INSERT, UPDATE, DELETE 문이실행되기전에트리거가실행됩니다. - AFTER : INSERT, UPDATE, DELETE 문이실행된후트리거가실행됩니다. - trigger_event : INSERT, UPDATE, DELETE 중에서한개이상올수있습니다. - FOR EACH ROW : 이옵션이있으면행트리거가됩니다. -- 행트리거 : 컬럼의각각의행의데이터행변화가생길때마다실행되며, 그데이터행의실제값을제어할수있습니다. -- 문장트리거 : 트리거사건에의해단한번실행되며, 컬럼의각데이터행을제어할수없습니다. 간단한행트리거예제 SQL>CREATE OR REPLACE TRIGGER triger_test BEFORE UPDATE ON dept FOR EACH ROW DBMS_OUTPUT.PUT_LINE(' 변경전컬럼값 : ' : old.dname); DBMS_OUTPUT.PUT_LINE(' 변경후컬럼값 : ' : new.dname); END; / SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) -- UPDATE 문을실행시키면.. PL/SQL 51

52 SQL>UPDATE dept SET dname = ' 총무부 ' WHERE deptno = 트리거가자동실행되어결과가출력됩니당. 변경전컬럼값 : 인사과변경후컬럼값 : 총무부 1 행이갱신되었습니다. 간단한행트리거예제 2 (PLSQL BLOCK 이있는트리거 ) SQL>CREATE OR REPLACE trigger sum_trigger BEFORE INSERT OR UPDATE ON emp FOR EACH ROW DECLARE -- 변수를선언할때는 DECLARE 문을사용해야합니다 avg_sal NUMBER; SELECT ROUND(AVG(sal),3) INTO avg_sal FROM emp; DBMS_OUTPUT.PUT_LINE(' 급여평균 : ' avg_sal); END; / 트리거가생성되었습니다. SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE 을출력하기위해사용 ) -- INSERT 문을실행합니다.. SQL> INSERT INTO EMP(EMPNO, ENAME, JOB, HIREDATE, SAL) VALUES(1000, 'LION', 'SALES', SYSDATE, 5000); -- INSERT 문을실행되기전까지의급여평균이출력됩니다. 급여평균 : 개의행이만들어졌습니다. PL/SQL 52

Microsoft Word - PLSQL.doc

Microsoft Word - PLSQL.doc PL/SQL 2008 DB system and programming 보충자료 PL/SQL의실행절 BEGIN 절에서의몇가지규칙 - 실행문은여러라인에걸쳐사용할수있다. - 변수명의명명규칙은오라클의일반적인명명규칙과동일하다. PL/SQL 블록내에서 SQL 문을사용할때에는컬럼명과같은변수명은피해야한다. - SQL에서와마찬가지로날짜와문자는홑따옴표 ( ) 를사용하여인용하여야한다.

More information

Microsoft Word - 04_EXCEPTION.doc

Microsoft Word - 04_EXCEPTION.doc ORACLE EXCEPTION INTRODUCTION PLSQL 블록이 PARSE 되는동안에발생되는에러를컴파일에러 (Compilation Error) 라고부르며, PLSQL 블록이실행되는동안에발생되는에러를런타임에러 (Run-Time Error) 라고부르는데, 이런타임에러를오라클에서는예외 (Exception) 라고부른다. 오라클의예외 (Exception) 는크게두가지로구분된다.

More information

ESQL/C

ESQL/C 20 장. PL/SQL 커서 주요내용 암시적커서 명시적커서선언 명시적커서열기및닫기 명시적커서에서데이터 Fetch 커서의속성 (%ISOPEN, %ROWCOUNT, %FOUND, %NOTFOUND) 커서 FOR 루프 PL/SQL 의커서 (Cursor) 커서 SQL 문과프로그램실행과정에서결과를저장할수있는오라클메모리구조 ( 개별 SQL 작업영역 ) 암시적커서 (Implicit

More information

13주-14주proc.PDF

13주-14주proc.PDF 12 : Pro*C/C++ 1 2 Embeded SQL 3 PRO *C 31 C/C++ PRO *C NOT! NOT AND && AND OR OR EQUAL == = SQL,,, Embeded SQL SQL 32 Pro*C C SQL Pro*C C, C Pro*C, C C 321, C char : char[n] : n int, short, long : float

More information

Microsoft Word - 05_SUBPROGRAM.doc

Microsoft Word - 05_SUBPROGRAM.doc ORACLE SUBPROGRAM INTRODUCTION PLSQL 은오라클에서제공하는프로그래밍언어이다. 이는데이터베이스언어인 SQL 과함께효과적으로데이터베이스에접근할수있는방법을제공하고있다. Procedural LanguageSQL 의약자에서볼수있듯이절차적인기능을기본적으로가지는프로그래밍언어이다. PLSQL 은기본적으로블록 (BLOCK) 구조를가지고있다. 블록의기본적인구성은선언부

More information

Microsoft Word - 03_SQL_CURSOR.doc

Microsoft Word - 03_SQL_CURSOR.doc SQL Cursor SQL 커서소개오라클서버에서는 SQL 문을실행할때마다처리 (Parse, Execution) 를위한메모리공간, 즉 SQL 커서를사용하게된다. 이메모리공간은 Private SQL Area 라고도불리우며, 오라클의작업환경이 Dedicated Server 환경이냐또는 MTS(Multi- Threaded Server) 환경이냐에따라서버내에위치되는곳이다르다.

More information

Microsoft PowerPoint - PLSQL.ppt

Microsoft PowerPoint - PLSQL.ppt PL/SQL Consultant 주종면 jina6678@yahoo.co.kr 1 - 목차 - 1장. PL/SQL 2장. 커서와에러처리 3장. 패키지와트리거 4장. PL/SQL의관리 2 1 PL-SQL 의개념 3 SQL 의장점과단점 < 장점 > 오라클 DB 지역정보부서코드지역명 1 서울 2 부산 SQL (1) 사용자가이해하기쉬운단어로구성 (2) 쉽게배울수있다.

More information

Microsoft PowerPoint - PLSQL.ppt

Microsoft PowerPoint - PLSQL.ppt SQL 의장점과단점 PL/SQL 오라클 DB 지역정보부서코드지역 1 서울 2 부산 < 장점 > (1) 사용자가이해하기쉬운단어로구성 (2) 쉽게배울수있다. (3) 복잡한로직을간단하게작성할수있다. (4) ANSI에의해문법이표준화되어있다. SQL < 단점 > Consultant 주종면 jina6678@yahoo.co.kr 1 (1) 반복처리를할수없다.(Loop)

More information

Microsoft Word - 02_PLSQL_BLOCK_STRUCTURE.doc

Microsoft Word - 02_PLSQL_BLOCK_STRUCTURE.doc PL/SQL BLOCK PL/SQL 블록 기본구조 PL/SQL 은기본적으로블록 (BLOCK) 구조를가지고있다. 블록의기본적인구성은선언부 (DECLARE), 실행부 (BEGIN), 예외처리부 (EXCEPTION) 로구성되어있다. PL/SQL 블록은그블록안에블록을포함할수있는데포함된블록을 Nested Block 이라한다. 블록의유형에는크게 Anonymous PL/SQL

More information

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE ALTIBASE HDB 6.3.1.10.1 Patch Notes 목차 BUG-45710 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG-45730 ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG-45760 ROLLUP/CUBE 절을포함하는질의는 SUBQUERY REMOVAL 변환을수행하지않도록수정합니다....

More information

Chap 11. PL-SQL

Chap 11. PL-SQL 데이터베이스개론과실습 원리를알면 IT 가맛있다 ERwin 과오라클 chapter 11. PL/SQL 한빛미디어 - 2 - PL/SQL(Oracle's Procedural Language extension to SQL) 정의 특짓 SQL 언어를사용한데이터조작과질의문등을블록구조안에젃차적단위의코드로포함하여젃차적프로그래밍을가능하게한강력한트랜잭션처리언어 SQL 문장에서변수정의,

More information

DBMS & SQL Server Installation Database Laboratory

DBMS & SQL Server Installation Database Laboratory DBMS & 조교 _ 최윤영 } 데이터베이스연구실 (1314 호 ) } 문의사항은 cyy@hallym.ac.kr } 과제제출은 dbcyy1@gmail.com } 수업공지사항및자료는모두홈페이지에서확인 } dblab.hallym.ac.kr } 홈페이지 ID: 학번 } 홈페이지 PW:s123 2 차례 } } 설치전점검사항 } 설치단계별설명 3 Hallym Univ.

More information

ALTIBASE HDB Patch Notes

ALTIBASE HDB Patch Notes ALTIBASE HDB 6.5.1.5.6 Patch Notes 목차 BUG-45643 암호화컬럼의경우, 이중화환경에서 DDL 수행시 Replication HandShake 가실패하는문제가있어수정하였습니다... 4 BUG-45652 이중화에서 Active Server 와 Standby Server 의 List Partition 테이블의범위조건이다른경우에 Handshake

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

Microsoft PowerPoint - e pptx

Microsoft PowerPoint - e pptx Import/Export Data Using VBA Objectives Referencing Excel Cells in VBA Importing Data from Excel to VBA Using VBA to Modify Contents of Cells 새서브프로시저작성하기 프로시저실행하고결과확인하기 VBA 코드이해하기 Referencing Excel Cells

More information

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조 - Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]

More information

강의 개요

강의 개요 DDL TABLE 을만들자 웹데이터베이스 TABLE 자료가저장되는공간 문자자료의경우 DB 생성시지정한 Character Set 대로저장 Table 생성시 Table 의구조를결정짓는열속성지정 열 (Clumn, Attribute) 은이름과자료형을갖는다. 자료형 : http://dev.mysql.cm/dc/refman/5.1/en/data-types.html TABLE

More information

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL 다양한예제로쉽게배우는 오라클 SQL 과 PL/SQL 서진수저 9 장인덱스를배웁니다 1 1. 인덱스란무엇인가? 2 - ROWID ( 주소 ) 조회하기 SCOTT>SELECT ROWID, empno, ename 2 FROM emp 3 WHERE empno=7902 ; ROWID EMPNO ENAME --------------------------------- ----------

More information

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

@OneToOne(cascade = = addr_id) private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a 1 대 1 단방향, 주테이블에외래키실습 http://ojcedu.com, http://ojc.asia STS -> Spring Stater Project name : onetoone-1 SQL : JPA, MySQL 선택 http://ojc.asia/bbs/board.php?bo_table=lecspring&wr_id=524 ( 마리아 DB 설치는위 URL

More information

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 ALTIBASE HDB 6.5.1.5.10 Patch Notes 목차 BUG-46183 DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG-46249 [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 BUG-46266 [sm]

More information

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins Project 1-3: Implementing DML Due: 2015/11/11 (Wed), 11:59 PM 이번프로젝트의목표는프로젝트 1-1 및프로젝트 1-2에서구현한프로그램에기능을추가하여간단한 DML을처리할수있도록하는것이다. 구현한프로그램은 3개의 DML 구문 (insert, delete, select) 을처리할수있어야한다. 테이블데이터는파일에저장되어프로그램이종료되어도사라지지않아야한다.

More information

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL 다양한예제로쉽게배우는 오라클 SQL 과 PL/SQL 서진수저 4 장 JOIN 을배웁니다 1 2 1. Cartesian Product ( 카티션곱, CROSS Join) - Oracle Join 문법 SQL> SELECT e.ename, d.dname 2 FROM emp e, dept d ; - ANSI Join 문법 SQL> SELECT e.ename, d.dname

More information

歯PLSQL10.PDF

歯PLSQL10.PDF 10 - SQL*Pl u s Pl / SQL - SQL*P lus 10-1 1 0.1 PL/ SQL SQL*Pl u s. SQL*P lus 10-2 1 0.2 S QL* Pl u s PL/ S QL SQL*Pl u s, Pl / SQL. - PL/ SQL (i npu t ), (s t or e ), (r un). - PL/ SQL s cr i pt,,. -

More information

단답형 (26 회기출문제 ) 1. 아래와같은테이블이있을때아래의 SQL 결과에대해서 Oracle, SQL Server 순서로적으시오 TAB1 COL1 CHAR(10) COL2 CHAR(10) INSERT INTO TAB1 VALUES ('1',''); INSERT INT

단답형 (26 회기출문제 ) 1. 아래와같은테이블이있을때아래의 SQL 결과에대해서 Oracle, SQL Server 순서로적으시오 TAB1 COL1 CHAR(10) COL2 CHAR(10) INSERT INTO TAB1 VALUES ('1',''); INSERT INT Study Room Doc.03 : SQLD 예상문제 ( 단답형 ) 네이버 Cafe : 데이터베이스전문가포럼 Study Room http://cafe.naver.com/sqlpd SQLD 26,25,24,21 회기출문제를바탕으로작성 작성자 : 월야루 도움 : 빙수민외카페댓글 2017-11-30 단답형 (26 회기출문제 ) 1. 아래와같은테이블이있을때아래의 SQL

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

歯sql_tuning2

歯sql_tuning2 SQL Tuning (2) SQL SQL SQL Tuning ROW(1) ROW(2) ROW(n) update ROW(2) at time 1 & Uncommitted update ROW(2) at time 2 SQLDBA> @ UTLLOCKT WAITING_SESSION TYPE MODE_REQUESTED MODE_HELD LOCK_ID1

More information

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Spring Boot/JDBC JdbcTemplate/CRUD 예제 Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

90

90 89 3 차원공간질의를위한효율적인위상학적데이터모델의검증 Validation of Efficient Topological Data Model for 3D Spatial Queries Seokho Lee Jiyeong Lee 요약 키워드 Abstract Keywords 90 91 92 93 94 95 96 -- 3D Brep adjacency_ordering DECLARE

More information

Jerry Held

Jerry Held ,, - - - : DELETE : ROW (ROWID) row ROWID : I/O Full Table Scan I/O Index Scan ROWID I/O Fast Full Index Scan scan scan scan I/O scan scan Unique, nonunique. (Concatenated Index) B* Tree Bitmap Reverse

More information

,, - - - : DELETE : ROW (ROWID) row ROWID : I/O Full Table Scan scan I/O scan Index Scan ROWID scan I/O Fast Full Index Scan scan scan I/O Unique, nonunique. (Concatenated Index) B* Tree Bitmap Reverse

More information

제4장 기본 의미구조 (Basic Semantics)

제4장  기본 의미구조 (Basic Semantics) 제 4 장블록및유효범위 Reading Chap. 5 숙대창병모 1 4.1 변수선언및유효범위 숙대창병모 2 변수선언과유효범위 변수선언 Declaration before Use! 대부분의언어에서변수는사용전에먼저선언해야한다. 변수의유효범위 (scope) 선언된변수가유효한 ( 사용될수있는 ) 프로그램내의범위 / 영역 변수이름뿐아니라함수등다른이름도생각해야한다. 정적유효범위

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

슬라이드 1

슬라이드 1 Pairwise Tool & Pairwise Test NuSRS 200511305 김성규 200511306 김성훈 200614164 김효석 200611124 유성배 200518036 곡진화 2 PICT Pairwise Tool - PICT Microsoft 의 Command-line 기반의 Free Software www.pairwise.org 에서다운로드후설치

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

Tcl의 문법

Tcl의 문법 월, 01/28/2008-20:50 admin 은 상당히 단순하고, 커맨드의 인자를 스페이스(공백)로 단락을 짓고 나열하는 정도입니다. command arg1 arg2 arg3... 한행에 여러개의 커맨드를 나열할때는, 세미콜론( ; )으로 구분을 짓습니다. command arg1 arg2 arg3... ; command arg1 arg2 arg3... 한행이

More information

MySQL-.. 1

MySQL-.. 1 MySQL- 기초 1 Jinseog Kim Dongguk University jinseog.kim@gmail.com 2017-08-25 Jinseog Kim Dongguk University jinseog.kim@gmail.com MySQL-기초 1 2017-08-25 1 / 18 SQL의 기초 SQL은 아래의 용도로 구성됨 데이터정의 언어(Data definition

More information

Microsoft Word - SQL튜닝_실습교재_.doc

Microsoft Word - SQL튜닝_실습교재_.doc * 실습환경 * 1. 오라클데이터베이스의튜닝실습을하기위해서는기본적인테이블과데이터가필요합니다. 다음과같은절차에의해환경설정을하십시오. 1) 강사가제공하는 Export 된파일 (scott.dmp) 을자신의 ORACLE 경로에저장하십시오. [C: ] cd C: ORACLE ORA92 BIN [C: ] dir scott.dmp scott.dmp 2) SYSTEM 사용자로접속하여

More information

´ÙÁß Row °á°ú¸¦ ´ÜÀÏÇàÀ¸·Î Äĸ¶·Î ºÐ¸®ÇØ Ãâ·ÂÇÏ´Â ¹æ¹ý

´ÙÁß Row °á°ú¸¦ ´ÜÀÏÇàÀ¸·Î Äĸ¶·Î ºÐ¸®ÇØ Ãâ·ÂÇÏ´Â ¹æ¹ý 5 중 1 2007-06-12 오후 5:52 Home Login Register SQL Query SQL Tuning Oracle Administration Tools References Boards SoQooL? 쏘쿨 SoQooL) 이란? Q&A Tips Lectures Function Lectures Oracle Spatial Tips Scripts SQL

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx 자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March

More information

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

More information

WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역

WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역 WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역시쉽게해결할수있다. 이번화이트페이퍼에서는 Window Function 중순위 RANK, ROW_NUMBER,

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드] Chapter 03 변수와자료형 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 변수와자료유형 변수 프로그램에서자료값을임시로기억할수있는저장공간을변수 (variables) 변수 (Variables) 는컴퓨터의메모리인 RAM(Random Access Memory) 에저장 물건을담는박스라고생각한다면박스의크기에따라담을물건이제한됨

More information

Bind Peeking 한계에따른 Adaptive Cursor Sharing 등장 엑셈컨설팅본부 /DB 컨설팅팀김철환 Bind Peeking 의한계 SQL 이최초실행되면 3 단계의과정을거치게되는데 Parsing 단계를거쳐 Execute 하고 Fetch 의과정을통해데이터

Bind Peeking 한계에따른 Adaptive Cursor Sharing 등장 엑셈컨설팅본부 /DB 컨설팅팀김철환 Bind Peeking 의한계 SQL 이최초실행되면 3 단계의과정을거치게되는데 Parsing 단계를거쳐 Execute 하고 Fetch 의과정을통해데이터 Bind Peeking 한계에따른 Adaptive Cursor Sharing 등장 엑셈컨설팅본부 /DB 컨설팅팀김철환 Bind Peeking 의한계 SQL 이최초실행되면 3 단계의과정을거치게되는데 Parsing 단계를거쳐 Execute 하고 Fetch 의과정을통해데이터를사용자에게전송하게되며 Parsing 단계에서실행계획이생성된다. Bind 변수를사용하는 SQL

More information

SQL Tuning Business Development DB

SQL Tuning Business Development DB SQL Tuning Business Development DB Oracle Optimizer 4.1 Optimizer SQL SQL.. SQL Optimizer :.. Rule-Based Optimization (RBO), Cost-Based Optimization (CBO) SQL Optimizer SQL Query Parser Dictionary Rule-Based

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드

More information

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate ALTIBASE HDB 6.1.1.5.6 Patch Notes 목차 BUG-39240 offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG-41443 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate 한뒤, hash partition

More information

문서 템플릿

문서 템플릿 HDSI 툴분석 [sql injection 기술명세서 ] Sql injection 기술명세서 Ver. 0.01 이문서는 sql injection 기술명세가범위입니다. Copyrights Copyright 2009 by CanvasTeam@SpeeDroot( 장경칩 ) All Rights Reserved. 장경칩의사전승인없이본내용의전부또는일부에대한복사, 전재,

More information

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL 다양한예제로쉽게배우는 오라클 SQL 과 PL/SQL 서진수저 6 장. DML 을배웁니다 1 - SQL 명령어들 DML (Data Manipulation Language) : INSERT( 입력 ), UPDATE( 변경 ), DELETE( 삭제 ), MERGE( 병합 ) DDL (Data Definition Language) : CREATE ( 생성 ), ALTER

More information

Cluster management software

Cluster management software 자바네트워크프로그래밍 (OCJP 국제공인자격취득중심 ) 충북대학교 최민 기본예제 예외클래스를정의하고사용하는예제 class NewException extends Exception { public class ExceptionTest { static void methoda() throws NewException { System.out.println("NewException

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

JUNIT 실습및발표

JUNIT 실습및발표 JUNIT 실습및발표 JUNIT 접속 www.junit.org DownLoad JUnit JavaDoc API Document 를참조 JUNIT 4.8.1 다운로드 설치파일 (jar 파일 ) 을다운로드 CLASSPATH 를설정 환경변수에서설정 실행할클래스에서 import JUnit 설치하기 테스트실행주석 @Test Test 를실행할 method 앞에붙임 expected

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

PowerPoint Presentation

PowerPoint Presentation #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을작성하면서 C 프로그램의구성요소에대하여알아본다.

More information

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL 다양한예제로쉽게배우는 오라클 SQL 과 PL/SQL 서진수저 3 장 SQL 복수행함수 ( 그룹함수 ) 를배웁니다 1 함수이름 의 미 사용예 COUNT 입력되는데이터들의건수를출력 COUNT(sal) SUM 입력되는데이터들의합계값을출력 SUM(sal) AVG 입력되는데이터들의평균값을출력 AVG(sal) MAX 입력되는데이터들중최고값을출력 MAX(sal) MIN

More information

Lab 3. 실습문제 (Single linked list)_해답.hwp

Lab 3. 실습문제 (Single linked list)_해답.hwp Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.

More information

Visual Basic 반복문

Visual Basic 반복문 학습목표 반복문 For Next문, For Each Next문 Do Loop문, While End While문 구구단작성기로익히는반복문 2 5.1 반복문 5.2 구구단작성기로익히는반복문 3 반복문 주어진조건이만족하는동안또는주어진조건이만족할때까지일정구간의실행문을반복하기위해사용 For Next For Each Next Do Loop While Wend 4 For

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

Microsoft PowerPoint - 10Àå.ppt

Microsoft PowerPoint - 10Àå.ppt 10 장. DB 서버구축및운영 DBMS 의개념과용어를익힌다. 간단한 SQL 문법을학습한다. MySQL 서버를설치 / 운영한다. 관련용어 데이터 : 자료 테이블 : 데이터를표형식으로표현 레코드 : 테이블의행 필드또는컬럼 : 테이블의열 필드명 : 각필드의이름 데이터타입 : 각필드에입력할값의형식 학번이름주소연락처 관련용어 DB : 테이블의집합 DBMS : DB 들을관리하는소프트웨어

More information

Microsoft Word - [Unioneinc] 특정컬럼의 통계정보 갱신_ _ldh.doc

Microsoft Word - [Unioneinc] 특정컬럼의 통계정보 갱신_ _ldh.doc 특정 Column 통계정보갱신가이드 유니원아이앤씨 DB 사업부이대혁 2015 년 03 월 02 일 문서정보프로젝트명서브시스템명 버전 1.0 문서명 특정 Column 통계정보갱신가이드 작성일 2015-03-02 작성자 DB사업부이대혁사원 최종수정일 2015-03-02 문서번호 UNIONE-201503021500-LDH 재개정이력 일자내용수정인버전 문서배포이력

More information

ORACLE-SQL

ORACLE-SQL ORACLE-SQL SELECT 문 2014-04-12 Blog.ksh123jjang.me 내용 SELECT문이란?... 2 SLELECT문사용하기... 3 모든열선택... 4 특정열검색... 5 SQL문작성방법... 6 열머리글기본값... 7 산술식... 8 NULL... 9 열 alias... 10 연결연산자... 11 대체인용연산자 (q)... 12 중복행제거...

More information

10.ppt

10.ppt : SQL. SQL Plus. JDBC. SQL >> SQL create table : CREATE TABLE ( ( ), ( ),.. ) SQL >> SQL create table : id username dept birth email id username dept birth email CREATE TABLE member ( id NUMBER NOT NULL

More information

쉽게

쉽게 Power Java 제 4 장자바프로그래밍기초 이번장에서학습할내용 자바프로그램에대한기초사항을학습 자세한내용들은추후에. Hello.java 프로그램 주석 주석 (comment): 프로그램에대한설명을적어넣은것 3 가지타입의주석 클래스 클래스 (class): 객체를만드는설계도 ( 추후에학습 ) 자바프로그램은클래스들로구성된다. 그림 4-1. 자바프로그램의구조 클래스정의

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

JAVA PROGRAMMING 실습 09. 예외처리

JAVA PROGRAMMING 실습 09. 예외처리 2015 학년도 2 학기 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우 정수를 0으로나누는경우 배열의크기보다큰인덱스로배열의원소를접근하는경우 파일의마지막부분에서데이터를읽으려고하는경우 예외처리 프로그램에문제를발생시키지않고프로그램을실행할수있게적절한조치를취하는것 자바는예외처리기를이용하여예외처리를할수있는기법제공 자바는예외를객체로취급!! 나뉨수를입력하시오

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

PowerPoint Presentation

PowerPoint Presentation 6 장 SQL (section 4-6) 목차 SECTION 01 SQL 의개요 1-1 SQL의역사 1-2 SQL의유형별종류 SECTION 02 데이터정의어 (DDL) 2-1 스키마 2-2 테이블생성 (CREATE TABLE) 2-3 테이블변경 (ALTER TABLE) 2-4 테이블제거 (DROP TABLE) 2-5 제약조건 SECTION 03 데이터조작어 (DML)

More information

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 ) 8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 ) - DDL(Data Definition Language) : show, create, drop

More information

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (I) Contents 변수와상수 블록과변수의범위 수식과연산자 제어문과반복문 문자와문자열 배열, 포인터, 메모리관리 구조체 디버거 (gdb) 사용법 2/17 Reference The C Programming language, Brian W. Kernighan, Dennis M. Ritchie, Prentice-Hall

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 3 프로시저 (Procedure) 프로시저 (Procedure) 란무엇인가? 논리적으로묶여있는하나의처리단위 내장프로시저 이벤트프로시저, 속성프로시저, 메서드, 비주얼베이직내장함수등

More information

슬라이드 1

슬라이드 1 UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 06 반복문 01 반복문의필요성 02 for문 03 while문 04 do~while문 05 기타제어문 반복문의의미와필요성을이해한다. 대표적인반복문인 for 문, while 문, do~while 문의작성법을 알아본다. 1.1 반복문의필요성 반복문 동일한내용을반복하거나일정한규칙으로반복하는일을수행할때사용 프로그램을좀더간결하고실제적으로작성할수있음.

More information

배치프로그램에서튜닝대상 SQL 추출하기 엑셈컨설팅본부 /DB 컨설팅팀박성호 배치프로그램의성능문제를진단하기위해트레이스를사용할수없고, 개별 SQL 에대한성 능점검은비효율적인경우에어떻게배치프로그램의성능문제를제대로파악하고개선안을도 출할것인가? 복잡한로직을가지고있는프로그램 (

배치프로그램에서튜닝대상 SQL 추출하기 엑셈컨설팅본부 /DB 컨설팅팀박성호 배치프로그램의성능문제를진단하기위해트레이스를사용할수없고, 개별 SQL 에대한성 능점검은비효율적인경우에어떻게배치프로그램의성능문제를제대로파악하고개선안을도 출할것인가? 복잡한로직을가지고있는프로그램 ( 배치프로그램에서튜닝대상 SQL 추출하기 엑셈컨설팅본부 /DB 컨설팅팀박성호 배치프로그램의성능문제를진단하기위해트레이스를사용할수없고, 개별 SQL 에대한성 능점검은비효율적인경우에어떻게배치프로그램의성능문제를제대로파악하고개선안을도 출할것인가? 복잡한로직을가지고있는프로그램 ( 이후배치프로그램 ) 에대한성능문제를파악하기위해수행되는모든 SQL 에대한개별수행내역을정확히판단할수있어야한다.

More information

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL 다양핚예제로쉽게배우는 오라클 SQL 과 PL/SQL 서진수저 10 장 view 를배웁니다 1 - View 란가상의테이블이다! 2 1. 단순 View (Simple View) SCOTT>CONN / AS SYSDBA; SYS>GRANT CREATE VIEW TO scott ; CREATE [OR REPLACE] [ FORCE NOFORCE] VIEW view

More information

Microsoft PowerPoint - Oracle Data Access Pattern.ppt

Microsoft PowerPoint - Oracle Data Access Pattern.ppt Special Key Note Oracle Data Access Pattern ( 주 ) 오픈메이드컨설팅 오동규수석컨설턴트 1 What is Data Access Pattern? > 데이터를 I/O 하는방식 Index Scan Full Table Scan Rowid 2 Why is The Pattern Important? >SQL 의성능을좌지우지함. >SQL

More information

@ p a g e c o n te n tt y p e = " te x t/ h tm l;c h a rs e t= u tf- 8 " fo r (in t i= 0 ; i< = 1 0 ; i+ + ) { o u t.p rin tln (" H e llo W o rld " + i + " < b r/> " ); = re s u lt + re s u lts u m ()

More information

C 프로그램의 기본

C 프로그램의 기본 C 프로그램의기본 목차 C 프로그램의구성요소 주석 main 함수 출력 C 언어의입력과출력 변수 printf 함수 scanf 함수 2 예제 2-1 : 첫번째 C 프로그램 3 2.1.1 주석 주석의용도 프로그램에대한설명 프로그램전체에대한대략적인정보를제공 프로그램수행에영향을미치지않는요소 4 2.1.1 주석 주석사용방법 /* 과 */ 을이용한여러줄주석 // 을이용한한줄주석

More information

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A 예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = 1 2 3 4 5 6 7 8 9 B = 8 7 6 5 4 3 2 1 0 >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = 0 0 0 0 1 1 1 1 1 >> tf = (A==B) % A 의원소와 B 의원소가똑같은경우를찾을때 tf = 0 0 0 0 0 0 0 0 0 >> tf

More information

FlashBackt.ppt

FlashBackt.ppt 1. Flashback 목적 Flashback 이란? 사용자실수에의한손상된데이터를 Database 의크기와상관없이복구를할수있는기능이다. 이 Flashback 기능은일반적인복구에서우려되는데이터베이스의크기를걱정하지않아도된다. 보통의사용자실수는커다란시스템장애가수반되며, 이를복구하기위해서는많은자원과시간이필요하다. 하지만 9i 에서지원되느 flashback query

More information

슬라이드 제목 없음

슬라이드 제목 없음 4.2 SQL 개요 SQL 개요 SQL은현재 DBMS 시장에서관계 DBMS가압도적인우위를차지하는데중요한요인의하나 SQL은 IBM 연구소에서 1974년에 System R이라는관계 DBMS 시제품을연구할때관계대수와관계해석을기반으로, 집단함수, 그룹화, 갱신연산등을추가하여개발된언어 1986년에 ANSI( 미국표준기구 ) 에서 SQL 표준을채택함으로써 SQL이널리사용되는데기여

More information

Result Cache 동작원리및활용방안 엑셈컨설팅본부 /DB 컨설팅팀김철환 개요 ORACLE DBMS 를사용하는시스템에서 QUERY 성능은무엇보다중요한요소중하나이며그 성능과직접적인관련이있는것이 I/O 이다. 많은건수를 ACCESS 해야만원하는결과값을얻을수있는 QUER

Result Cache 동작원리및활용방안 엑셈컨설팅본부 /DB 컨설팅팀김철환 개요 ORACLE DBMS 를사용하는시스템에서 QUERY 성능은무엇보다중요한요소중하나이며그 성능과직접적인관련이있는것이 I/O 이다. 많은건수를 ACCESS 해야만원하는결과값을얻을수있는 QUER Result Cache 동작원리및활용방안 엑셈컨설팅본부 /DB 컨설팅팀김철환 개요 ORACLE DBMS 를사용하는시스템에서 QUERY 성능은무엇보다중요한요소중하나이며그 성능과직접적인관련이있는것이 I/O 이다. 많은건수를 ACCESS 해야만원하는결과값을얻을수있는 QUERY 을실행하게된다면 BLOCK I/O 가많이발생하게된다. 이런이유로 QUERY 의성능은좋지못할것이다.

More information

슬라이드 1

슬라이드 1 17.1 데이터베이스트리거 17.2 DML 트리거 17.3 DML 트리거작성 17.4 DML 트리거관리 17.5 INSTEAD OF 트리거 17.6 NON-DML 트리거 17.1 데이터베이스트리거 데이터베이스트리거 (database trigger) 테이블에어떤조작이가해졌을때에미리지정해놓은처리를자동으로실행시키는블록 PL/SQL 블록으로작성, 오라클데이터베이스에저장

More information

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2 예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 kkman@sangji.ac.kr 2 예외 (exception) 실행시간에발생하는에러 (run-time error) 프로그램의비정상적인종료잘못된실행결과 예외처리 (exception handling) 기대되지않은상황에대해예외를발생야기된예외를적절히처리 (exception handler) kkman@sangji.ac.kr

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Lecture 02 프로그램구조및문법 Kwang-Man Ko kkmam@sangji.ac.kr, compiler.sangji.ac.kr Department of Computer Engineering Sang Ji University 2018 자바프로그램기본구조 Hello 프로그램구조 sec01/hello.java 2/40 자바프로그램기본구조 Hello 프로그램구조

More information

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345]) 예외와예외클래스 예외처리 514760-1 2016 년가을학기 12/08/2016 박경신 오류의종류 에러 (Error) 하드웨어의잘못된동작또는고장으로인한오류 에러가발생되면 JVM실행에문제가있으므로프로그램종료 정상실행상태로돌아갈수없음 예외 (Exception) 사용자의잘못된조작또는개발자의잘못된코딩으로인한오류 예외가발생되면프로그램종료 예외처리 추가하면정상실행상태로돌아갈수있음

More information

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r -------------------------------------------------------------------- -- 1. : ts_cre_bonsa.sql -- 2. :

More information

ISP and CodeVisionAVR C Compiler.hwp

ISP and CodeVisionAVR C Compiler.hwp USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler

More information