Altibase Stored Procedure Manual

Size: px
Start display at page:

Download "Altibase Stored Procedure Manual"

Transcription

1 ALTIBASE HDB Application Development Stored Procedures Manual Release (November 30, 2017)

2 ALTIBASE Application Development Stored Procedures Manual Release Copyright c 2001~2016 ALTIBASE Corp. All Rights Reserved. 본문서의저작권은 알티베이스에있습니다. 이문서에대하여당사의동의없이무단으로복제또는전용할수없습니다. 알티베이스 서울시구로구구로동 대륭포스트타워 Ⅱ 10 층전화 : 팩스 : 고객서비스포털 : homepage:

3 목차 서문 7 이매뉴얼에대하여 8 1. 저장프로시저 13 저장프로시저의개요 14 저장프로시저의구조 17 저장프로시저사용시주의사항 저장프로시저 SQL 문 19 개요 20 CREATE PROCEDURE 23 ALTER PROCEDURE 29 DROP PROCEDURE 31 EXECUTE 32 CREATE FUNCTION 34 ALTER FUNCTION 38 DROP FUNCTION 저장프로시저블록 41 저장프로시저블록 42 지역변수선언 45 SELECT INTO 52 RETURNING INTO 절 58 할당문 65 LABEL 68 PRINT 71 RETURN 74 목차 3

4 4. 흐름제어 77 개요 78 IF 79 CASE 84 LOOP 88 WHILE LOOP 90 FOR LOOP 92 EXIT 97 CONTINUE 100 GOTO 102 NULL 커서 107 커서의개요 108 CURSOR 110 OPEN 113 FETCH 116 CLOSE 119 Cursor FOR LOOP 120 커서속성 사용자정의타입 129 개요 130 사용자정의타입의정의 132 Associative Array 관련함수 135 RECORD 타입변수및 Associative Array변수의사용 139 REF CURSOR 타입세트 147 개요 148 CREATE TYPESET 151 DROP TYPESET 동적 SQL 157 동적 SQL의개요 158 EXECUTE IMMEDIATE Stored Procedures Manual

5 OPEN FOR 예외처리 165 개요 166 EXCEPTION 169 RAISE 170 RAISE_APPLICATION_ERROR 172 사용자정의예외 173 SQLCODE와 SQLERRM 176 Exception Handler 저장패키지 183 개요 184 CREATE PACKAGE 187 CREATE PACKAGE BODY 189 ALTER PACKAGE 193 DROP PACKAGE 194 EXECUTE 내장함수와저장프로시저 197 파일제어 198 DataPort 221 DBMS Stats 239 그외함수들 249 A. 부록 : 예제 253 저장프로시저예제 254 파일제어예제 262 찾아보기 265 목차 5

6

7 서문 서문 7

8 이매뉴얼에대하여 이매뉴얼은저장프로시저의개념및사용방법에대해설명한다. 대상사용자 이매뉴얼은다음과같은 ALTIBASE HDB 사용자를대상으로작성되었다. 데이터베이스관리자 성능관리자 데이터베이스사용자 응용프로그램개발자다음과같은배경지식을가지고이매뉴얼을읽는것이좋다. 컴퓨터, 운영체제및운영체제유틸리티운용에필요한기본지식 관계형데이터베이스사용경험또는데이터베이스개념에대한이해 컴퓨터프로그래밍경험 소프트웨어환경 이매뉴얼은데이터베이스서버로 ALTIBASE HDB 버전 을 사용한다는가정하에작성되었다. 이매뉴얼의구성 이매뉴얼은다음과같이구성되어있다. 제 1 장저장프로시저이장은저장프로시저의개념및구조, 사용시주의사항에대해설명한다. 제 2 장저장프로시저 SQL 문이장은저장프로시저 SQL 문에대한사용방법에대해설명한다. 제 3 장저장프로시저블록이장은저장프로시저블록의개념, 저장프로시저바디내에서선언하는지역변수및사용가능한문장에대해설명한다. 8 Stored Procedures Manual

9 제 4 장흐름제어이장은저장프로시저바디내에서절차적프로그램작성이가능하도록프로그램흐름을제어할수있는흐름제어문에대해설명한다. 제 5 장커서이장은저장프로시저내에서조회레코드건수가여러개인 SELECT 문을처리할수있도록커서를정의하고레코드를제어할수있는커서관련문들에대해설명한다. 제 6 장사용자정의타입이장은저장프로시저내에서사용자정의타입인 record 및 associative array 의정의및사용방법에대해설명한다. 제 7 장타입세트이장은사용자정의타입의집합인타입세트의정의및사용방법에대해설명한다. 제 8 장동적 SQL 이장은실행시간에사용자가원하는질의를만들어서실행하기위한동적 SQL 에대해설명한다. 제 9 장예외처리이장은저장프로시저실행중오류발생시저장프로시저내에서오류에대한예외처리가가능하도록하는예외처리관련문에대해설명한다. 제 10 장저장패키지이장은패키지를생성하고사용하는방법을설명한다. 제 11 장내장함수와저장프로시저 ALTIBASE HDB 는다양한종류의내장된저장프로시저와함수를제공한다. 저장프로시저내에서의파일제어함수와 DataPort 로통칭되는이전 (migration) 관련저장프로시저가그것이다. 이장은이들저장프로시저와함수를소개하고그사용법에대해설명한다. A. 부록이장은이매뉴얼의예제에서사용한스키마에대한설명과저장프로시저를이용한예제프로그램을설명한다. 문서화규칙 이절에서는이매뉴얼에서사용하는규칙에대해설명한다. 이 규칙을이해하면이매뉴얼과설명서세트의다른매뉴얼에서정보를 쉽게찾을수있다. 서문 9

10 여기서설명하는규칙은다음과같다. 구문다이어그램 샘플코드규칙 구문다이어그램 이매뉴얼에서는다음구성요소로구축된다이어그램을사용하여, 명령문의구문을설명한다. 구성요소 예약어 의미명령문이시작한다. 완전한명령문이아닌구문요소는화살표로시작한다. 명령문이다음라인에계속된다. 완전한명령문이아닌구문요소는이기호로종료한다. 명령문이이전라인으로부터계속된다. 완전한명령문이아닌구문요소는이기호로시작한다. ; 명령문이종료한다. SELECT 필수항목 선택적항목 NOT ADD 선택사항이있는필수항목. 한항목만제공해야한다. DROP 선택사항이있는선택적항목. ASC DESC ASC 선택적항목. 여러항목이허용된다. 각반복앞부분에 콤마가와야한다. DESC, 샘플코드규칙 코드예제는 SQL, Stored Procedure, isql, 또는다른명령라인 구문들을예를들어설명한다. 10 Stored Procedures Manual

11 아래테이블은코드예제에서사용된인쇄규칙에대해설명한다. 규칙 의미 예제 [ ] 선택항목을표시 VARCHAR [(size)] [[FIXED ] VARIABLE] { } 필수항목표시. 반드시하나이상을선택해야되는표시 { ENABLE DISABLE COMPILE } 선택또는필수항목표시의인자구분표시 { ENABLE DISABLE COMPILE } [ ENABLE DISABLE COMPILE ]... 그이전인자의반복표시예제코드들의생략되는것을표시 SQL> SELECT ename FROM employee; ENAME SWNO HJNO HSCHOI rows selected. 그밖에기호 위에서보여진기호이외에기호들 EXEC :p1 := 1; acc NUMBER(11,2); 기울임꼴 구문요소에서사용자가지정해야하는변수, 특수한값을제공해야만하는위치지정자 SELECT * FROM table_name; CONNECT userid/password; 소문자 사용자가제공하는프로그램의요소들, 예를들어테이블이름, 칼럼이름, 파일 SELECT ename FROM employee; 이름등 대문자 시스템에서제공하는요소들또는구문에나타나는키워드 DESC SYSTEM_.SYS_INDICES_; 샘플스키마 이매뉴얼내의예제중의일부는 employees, departments 및 orders 테이블같은샘플테이블에기반하여작성되었다. 이들 서문 11

12 테이블은 $ALTIBASE_HOME/sample/APRE/schema 디렉터리의 schema.sql 을사용하여생성할수있다. 샘플스키마에대한온전한 정보는 General Reference 를참고하기바란다. 관련자료 자세한정보를위하여다음문서목록을참조하기바란다. Installation Guide Getting Started Guide SQL Reference isql User s Manual Error Message Reference 온라인매뉴얼 Altibase 고객서비스포털 ( 에서국문및 영문매뉴얼 (PDF, HTML) 을받을수있다. Altibase 는여러분의의견을환영합니다. 이매뉴얼에대한여러분의의견을보내주시기바랍니다. 사용자의의견은다음버전의매뉴얼을작성하는데많은도움이됩니다. 보내실때에는아래내용과함께고객서비스포털 ( 로보내주시기바랍니다. 사용중인매뉴얼의이름과버전 매뉴얼에대한의견 사용자의성함, 주소, 전화번호이외에도 Altibase 기술지원설명서의오류와누락된부분및기타기술적인문제들에대해서이주소로보내주시면정성껏처리하겠습니다. 또한, 기술적인부분과관련하여즉각적인도움이필요한경우에도고객서비스포털을통해서비스를요청하시기바랍니다. 여러분의의견에항상감사드립니다. 12 Stored Procedures Manual

13 1. 저장프로시저 저장프로시저 13

14 저장프로시저의개요 저장프로시저 (Stored Procedure) 란 SQL 문들과흐름제어문, 할당문, 오류처리루틴등으로구성된데이터베이스객체 (object) 중의하나이다. 저장프로시저는생성될때컴파일되어바로실행가능한상태로데이터베이스에저장되며여러세션에서동시에하나의저장프로시저를실행하는것도가능하다 저장프로시저 (Stored Procedure) 라는용어는때때로저장프로시저와저장함수 (Stored Function) 을모두지칭하기도한다. 저장프로시저와저장함수는저장함수가실행시값을반환하는것외에는차이가없다. 저장프로시저와저장함수는각각 CREATE PROCEDURE 와 CREATE FUNCTION 구문을사용해서생성할수있다. 이구문에대한자세한설명은 2 장 저장프로시저 SQL 문 을참고하기바란다. 저장프로시저의종류 저장프로시저 저장프로시저는 SQL 구문이나다른저장프로시저내에서입력인자, 출력인자, 입출력인자를가지고실행할수있다. 저장프로시저호출시, 프로시저의바디부분에정의된절차에따라서 SQL 문을수행하게된다. 저장프로시저는반환값을가지지않지만, 출력인자와입출력인자들을통해프로시저를호출한클라이언트에게값을전달할수도있다. 이는반환값을갖지않기때문에 SQL 문의연산식 (expression) 내에서피연산자로사용될수없다. 저장함수 값을반환하는것만제외하면저장프로시저와동일하다. 저장프로시저와달리하나의반환값을가지므로 SQL 문의연산식 (expression) 내에서피연산자로사용할수있다. 타입세트 저장프로시저의사용자정의타입들을정의한집합이다. 이는주로저장프로시저끼리인자또는리턴값으로사용자정의타입을주고받을때사용한다. 자세한내용은 7 장 타입세트 에서다룬다. 14 Stored Procedures Manual

15 저장프로시저의특징 SQL 구문을이용한절차적프로그램 ALTIBASE HDB PSM (Persistent Stored Module) 은흐름제어문과예외처리문을제공하므로 SQL 문을사용해서절차적프로그래밍이가능하다. 성능 여러 SQL 문을순차적으로수행하는클라이언트프로그램의경우에는각 SQL 문수행시마다데이터베이스서버와통신을해야하므로통신비용이많이발생한다. 반면, 저장프로시저로작성된프로그램은프로시저호출시한번의통신만으로여러 SQL 문을수행할수있다. 따라서, 저장프로시저를사용하면통신부하의감소와함께데이터베이스서버와클라이언트응용프로그램간의데이터타입의차이로인해발생하는내부적인데이터타입변환의부하도줄일수있다. 모듈화 소스코드관리의용이성 업무절차를구현하는데필요한모든 SQL 작업을하나의저장 프로시저로묶어모듈화하여관리할수있다. 저장프로시저는데이터베이스서버에저장되는모듈이기때문에, 업무로직의변경시여러클라이언트에설치된프로그램들을모두수정할필요없이저장프로시저만변경하면되므로프로그램관리가용이하다. 공유와생산성 한사용자가생성한저장프로시저는데이터베이스에저장되므로접근권한이부여된다른사용자도해당저장프로시저를실행할수있어서로공유할수있을뿐만아니라, 한저장프로시저내에서다른저장프로시저의호출이가능하므로같은업무절차의재프로그래밍이필요없으므로생산성을높일수있다. 저장프로시저 15

16 SQL 과의통합성 저장프로시저내의흐름제어문의조건절은 SELECT 문의조건절을그대로사용할수있다. 즉, C/C++ 등의주언어의흐름제어문의조건절에서는사용할수없는 SQL 문스타일의기능을사용할수있다. 또한, 연산식에부질의 (subquery) 를사용하거나 SQL 문이지원하는시스템제공함수들을그대로사용할수있다는점등 SQL 문과밀착된프로그래밍이가능하다. 에러및예외처리 저장프로시저내에서 Exception Handler 를제공하므로 SQL 문 수행도중오류가발생했을때적절한대응조치를서버내에서바로 처리할수있다. 저장성 저장프로시저또한데이터베이스객체이기때문에사용자가 삭제하기전까지데이터베이스내에저장된다. 따라서업무절차 또한데이터베이스에저장하여보존시킬수있다. 16 Stored Procedures Manual

17 저장프로시저의구조 저장프로시저는블록으로구조화된언어로, 저장프로시저의바디는여러개의논리적인블록들로구성된다. 저장프로시저는크게헤더와바디로나뉘어진다. 저장프로시저의바디는하나의큰블록으로서선언부, 프로시저의실제바디, 예외처리부로구성된다. 바디는다시여러개의하위블록들을가질수있다. 저장프로시저헤더저장프로시저바디 ( 블록1) 저장프로시저구조를예를들어설명하면다음과같다. CREATE FUNCTION mycheck (id IN INTEGER,... ) RETURN INTEGER AS v_name CHAR(20); v_salary INTEGER; comm_missing EXCEPTION; CURSOR IF id > THEN... DECLARE END IF; RAISE comm_missing;... RETURN v_salary;... EXCEPTION... 블록 2 WHEN comm_missing THEN 블록 1 선언부 블록 1 바디 블록 1 예외처리부 블록 2 는블록 1 의하위블록으로블록 1 의구조와같이선언부, 바디, 예외처리부로구성될수도있다. 흐름제어문도명시적인시작과끝을알수있는하나의블록이다. 저장프로시저 17

18 저장프로시저사용시주의사항 트랜잭션관리 저장프로시저내에서사용가능한트랜잭션제어문은 COMMIT, ROLLBACK 문이다. 저장프로시저내에서사용한트랜잭션제어문은 저장프로시저밖의작업에도영향을미칠수있다. 예를들어서 NON-AUTOCOMMIT 모드에서다음과같은작업을 수행했다고가정하자. isql> INSERT INTO t1 values (1); isql> INSERT INTO t1 values (2); isql> EXECUTE proc1; proc1 이 INSERT INTO t1 values (3) 구문과 ROLLBACK 문을 수행한다면프로시저내에서입력한 3 뿐만아니라프로시저외부의 isql 에서입력한 1 과 2 도 ROLLBACK 된다. 즉, 위의두 INSERT 문과 EXECUTE 문은하나의트랜잭션으로처리된다. 제약사항 커서가 OPEN 된상태에서 COMMIT 또는 ROLLBACK 을실행할수있다. 단, 커서가 OPEN 된상태에서 COMMIT 을한번도하지않고 ROLLBACK 을실행하면커서가닫히므로주의해야한다. SELECT 문내에서호출되는저장함수의경우저장함수내에 INSERT, UPDATE, DELETE 문은사용할수없으며, 트랜잭션제어문도수행할수없다. INSERT, UPDATE, DELETE 문내에서호출되는저장함수내에서도트랜잭션제어문을수행할수없다. 관련메타테이블 저장프로시저관련메타테이블에대한자세한내용은 General Reference 의데이터딕셔너리부분을참조한다. 18 Stored Procedures Manual

19 2. 저장프로시저 SQL 문 저장프로시저 SQL 문 19

20 개요 저장프로시저 SQL 문 아래표는저장프로시저, 함수와타입세트를생성하고관리하는데 사용하는 DDL 문을보여준다. CREATE TYPESET 과 DROP TYPESET 구문에대한설명은 7 장 타입세트를참고하기바란다. 종류 관련문장 설명 생성 CREATE [OR REPLACE] PROCEDURE 문 새로운저장프로시저를생성하거나이미생성된저장프로시저의정의를변경하는문장이다. CREATE [OR REPLACE] FUNCTION 문 새로운저장함수를생성하거나이미생성된저장함수의정의를변경하는문장이다. CREATE [OR REPLACE] TYPESET 타입세트를생성또는변경하는문장이다. 문 변경 ALTER PROCEDURE 문 이구문은저장프로시저를재컴파일하여프로시저를유효한상태로변경하고자할때사용한다. ALTER FUNCTION 문 ALTER PROCEDURE문과동일하다. 삭제 DROP PROCEDURE 문 생성된저장프로시저를삭제하는문장이다. DROP FUNCTION 문 생성된저장함수를삭제하는문장이다. DROP TYPESET 문 생성된타입세트를삭제하는문장이다. 실행 EXECUTE 문 저장프로시저또는저장함수를실행하는문장이다. function_name SQL문내에서호출할때이름으로참조할수있다. 20 Stored Procedures Manual

21 데이터타입 저장프로시저에서는다음과같은데이터타입을지원한다. SQL 데이터타입 BOOLEAN 타입 FILE_TYPE 저장프로시저내에서만사용가능하며, 파일제어를위한타입이다. 자세한내용은 11 장의 파일제어 를참조한다. 사용자정의타입저장프로시저내에서만사용가능하며, RECORD 및 ASSOCIATIVE ARRAY 를지원한다. 자세한내용은 6 장 사용자정의타입 을참조한다. SQL 데이터타입 SQL 구문에서사용가능한데이터타입모두 PSM ( 저장프로시저, 저장함수 ) 에서사용할수있다. 각데이터타입에대한자세한 내용은 General Reference 의 " 데이터타입 " 장을참조한다. 아래표에나열한 SQL 데이터타입은 SQL 과 PSM 에서사용가능한 최대크기가다르다. 데이터타입 SQL에서최대크기 PSM에서최대크기 CHAR(M) VARCHAR(M) NCHAR(M) (UTF-16) (UTF-8) (UTF-16) (UTF-8) NVARCHAR(M) (UTF-16) (UTF-8) (UTF-16) (UTF-8) BLOB 2GB MB LOB_OBJECT_BUFFER _SIZE 프로퍼티에의해결정 ( 기본값 : 32KB) CLOB 2GB MB LOB_OBJECT_BUFFER _SIZE 프로퍼티에의해결정 ( 기본값 : 32KB) CHAR, VARCHAR, NCHAR, NVARCHAR 타입의크기를지정하지 않으면크기는 1 이다. 저장프로시저 SQL 문 21

22 BOOLEAN 타입 BOOLEAN 타입은저장프로시저또는저장함수에서만사용 가능하며, TRUE 또는 FALSE, NULL 값만가질수있다. BOOLEAN 변수는다음과같이선언할수있다. variable_name BOOLEAN; BOOLEAN 타입은 SQL 데이터타입중어느것과도호환되지 않으므로사용시아래와같은제약이있다. 테이블칼럼에 BOOLEAN 값을입력할수없다. 테이블칼럼의값을 BOOLEAN 변수에 fetch 할수없다. BOOLEAN 타입을반환하는저장함수나내장함수를 SQL 문에 사용할수없다. BOOLEAN 값은출력함수 (PRINT, PUT 등 ) 의인자로전달할수 없다. BOOLEAN 타입은아래와같이사용할수있다. done BOOLEAN;... done := TRUE; done := FALSE; done := NULL;... IF done = TRUE THEN... IF done = FALSE THEN... IF done THEN... IF done is NULL THEN Stored Procedures Manual

23 CREATE PROCEDURE 구문 기능 저장프로시저를새로생성하거나이미생성되어있는저장 프로시저를새로운저장프로시저로변경하는기능을수행한다. 저장프로시저 SQL 문 23

24 parameter_declaration 인자는생략할수있으며, 인자를명시할경우엔인자의명칭, 데이터타입및입출력구분을명시해야한다. 사용가능한입출력구분값은다음세가지중의하나이고생략시에 IN 이기본값이된다. 인자가 OUT 또는 INOUT 인경우에는 DEFAULT expression 은정의할수없다. IN: 프로시저호출시입력값으로주어지는입력인자 OUT: 프로시저실행후출력값을반환하는인자 INOUT: 입출력공용인자로프로시저호출시입력값을줄수있고, 실행후에출력값을반환할수있다저장프로시저가실행될때, IN 인자를사용해서프로시저에값을전달하고, 프로시저는 OUT 인자를사용해서호출한루틴에값을반환한다. IN 인자는저장프로시저내에서상수처럼동작하므로, 프로시저내에서할당문을사용해인자에값을대입할수없으며 SELECT 문의 INTO 절에도사용할수없다. 인자는기본값을가질수있다. 저장프로시저가호출될때기본값이정의된인자에값을넘겨주지않을경우, 기본값이사용된다. declaration_section 3 장의 지역변수선언 절참고 data_type 3 장의 지역변수선언 절참고 Exception Handler 9 장 Exception Handler 참고 CREATE PROCEDURE 문의실행 저장프로시저생성구문은텍스트편집기에서작성해서 isql 에붙여넣거나, isql 에서직접한라인씩입력할수도있다. 각 SQL 문, 저장프로시저제어문, 그리고블록 (END) 의끝에세미콜론 ( ; ) 을입력한다. 24 Stored Procedures Manual

25 isql 에서 CREATE PROCEDURE 문을실행할때는마지막 문의다음라인에반드시슬래시 ( / ) 를입력해야프로시저생성문이실행된다. CREATE PROCEDURE 문실행시컴파일오류가발생하지않고블록이성공적으로컴파일되면 Create Success 메시지가출력된다. 저장프로시저바디부분에대해서는다음장에서부터각각블록, 흐름제어문, 커서, Exception Handler 부분으로구분해서설명한다. 예제 예제 1 (IN 인자사용 ) CREATE TABLE t1 (i1 INTEGER UNIQUE, i2 INTEGER, i3 INTEGER); INSERT INTO t1 VALUES (1,1,1); INSERT INTO t1 VALUES (2,2,2); INSERT INTO t1 VALUES (3,3,3); INSERT INTO t1 VALUES (4,4,4); INSERT INTO t1 VALUES (5,5,5); SELECT * FROM t1; CREATE OR REPLACE PROCEDURE proc1 (p1 IN INTEGER, p2 IN INTEGER, p3 IN INTEGER) AS v1 INTEGER; v2 t1.i2%type; v3 INTEGER; SELECT * INTO v1, v2, v3 FROM t1 WHERE i1 = p1 AND i2 = p2 AND i3 = p3; IF v1 = 1 AND v2 = 1 AND v3 = 1 THEN UPDATE t1 SET i2 = 7 WHERE i1 = v1; ELSIF v1 = 2 AND v2 = 2 AND v3 = 2 THEN UPDATE t1 SET i2 = 7 WHERE i1 = v1; ELSIF v1 = 3 AND v2 = 3 AND v3 = 3 THEN UPDATE t1 SET i2 = 7 WHERE i1 = v1; ELSIF v1 = 4 AND v2 = 4 AND v3 = 4 THEN UPDATE t1 SET i2 = 7 WHERE i1 = v1; ELSE DELETE FROM t1; END IF; INSERT INTO t1 VALUES (p1+10, p2+10, p3+10); / isql> EXEC proc1 (2,2,2); Execute success. isql> SELECT * FROM t1; T1.I1 T1.I2 T1.I 저장프로시저 SQL 문 25

26 26 Stored Procedures Manual rows selected. 예제 2 ( 기본값이있는인자사용 ) 예제 3 CREATE TABLE t1 (i1 INTEGER, i2 INTEGER, i3 INTEGER); CREATE OR REPLACE PROCEDURE proc1 (p1 IN INTEGER DEFAULT 1, p2 IN INTEGER DEFAULT 1, p3 IN INTEGER DEFAULT 1) AS INSERT INTO t1 VALUES (p1, p2, p3); / EXEC proc1; SELECT * FROM t1; EXEC proc1(2); SELECT * FROM t1; EXEC proc1(3,3); SELECT * FROM t1; EXEC proc1(4,4,4); isql> SELECT * FROM t1; T1.I1 T1.I2 T1.I rows selected. CREATE OR REPLACE PROCEDURE proc1 (emp_id INTEGER, amount NUMBER(10,2)) AS UPDATE employees SET salary = salary + amount WHERE eno = emp_id; / isql> EXEC proc1(15, '250'); Execute success. isql> SELECT * FROM employees WHERE eno=15; ENO E_LASTNAME E_FIRSTNAME EMP_JOB EMP_TEL DNO SALARY SEX BIRTH JOIN_DATE STATUS

27 예제 4 ( 출력, 입출력인자사용 ) 예제 5 15 Davenport Jason webmaster M H 1 row selected. CREATE TABLE t4(i1 INTEGER, i2 INTEGER); INSERT INTO t4 VALUES(1,1); INSERT INTO t4 VALUES(1,1); INSERT INTO t4 VALUES(1,1); INSERT INTO t4 VALUES(1,1); INSERT INTO t4 VALUES(1,1); CREATE OR REPLACE PROCEDURE proc1(a1 OUT INTEGER, a2 IN OUT INTEGER) AS SELECT COUNT(*) INTO a1 FROM t4 WHERE i2 = a2; / isql> VAR t3 INTEGER; isql> VAR t4 INTEGER; isql> EXEC :t4 := 1; Execute success. isql> EXEC proc1(:t3, :t4); Execute success. isql> PRINT t3; NAME TYPE VALUE T3 INTEGER 5 CREATE OR REPLACE PROCEDURE proc1(p1 INTEGER, p2 IN OUT INTEGER, p3 OUT INTEGER) AS p2 := p1; p3 := p ; / isql> VAR v1 INTEGER; isql> VAR v2 INTEGER; isql> VAR v3 INTEGER; isql> EXEC :v1 := 3; Execute success. isql> EXEC proc1(:v1, :v2, :v3); Execute success. isql> PRINT VAR; [ HOST VARIABLE ] NAME TYPE VALUE V1 INTEGER 3 V2 INTEGER 3 V3 INTEGER 103 저장프로시저 SQL 문 27

28 예제 6 ( 입출력인자사용 ) 예제 7 CREATE TABLE t3(i1 INTEGER); INSERT INTO t3 VALUES(1); INSERT INTO t3 VALUES(1); INSERT INTO t3 VALUES(1); CREATE OR REPLACE PROCEDURE proc1(a1 IN OUT INTEGER) AS SELECT COUNT(*) INTO a1 FROM t3 WHERE i1 = a1; / isql> VAR p1 INTEGER; isql> EXEC :p1 := 1; Execute success. isql> EXEC proc1(:p1); Execute success. isql> PRINT p1; NAME TYPE VALUE P1 INTEGER 3 CREATE OR REPLACE PROCEDURE proc1(p1 INTEGER, p2 IN OUT INTEGER, p3 OUT INTEGER) AS p2 := p1 + p2; p3 := p ; / isql> VAR v1 INTEGER; isql> VAR v3 INTEGER; isql> EXEC :v1 := 3; Execute success. isql> EXEC :v2 := 5; Execute success. isql> EXEC proc1(:v1, :v2, :v3); Execute success. isql> PRINT VAR; [ HOST VARIABLE ] NAME TYPE VALUE V1 INTEGER 3 V2 INTEGER 8 V3 INTEGER Stored Procedures Manual

29 ALTER PROCEDURE 구문 alter_procedure_statement ::= ALTER PROCEDURE procedure_name user_name. COMPILE ; 기능 저장프로시저생성이후에이프로시저내에서참조하는테이블, 시퀀스등의데이터베이스오브젝트혹은이저장프로시저가호출하는다른저장프로시저, 저장함수등의정의가변경되어서, 현재이저장프로시저의실행계획으로는이를실행할수없는경우에이저장프로시저는무효한 (invalid) 상태라고한다. 예를들면처음저장프로시저생성시존재하던인덱스가삭제된경우이전실행계획은인덱스를통해테이블에접근하도록계획되어있으므로이전의실행계획을이용해서테이블에접근할수없게된다. 무효한상태의프로시저가호출되면, ALTIBASE HDB 서버는바로자동으로이를재컴파일한다. 그러나런타임시에컴파일하는것은심각한성능이슈를불러올수있으므로, 프로시저가무효한상태가되었을때수동으로컴파일하는것이좋다. ALTER PROCEDURE 문은사용자가명시적으로저장프로시저를컴파일때사용된다. 예제 예제 1 CREATE TABLE t1 (i1 NUMBER, i2 VARCHAR(10), i3 DATE); CREATE OR REPLACE PROCEDURE proc1 (p1 IN NUMBER, p2 IN VARCHAR(10), p3 IN DATE) 저장프로시저 SQL 문 29

30 AS IF p1 > 0 then INSERT INTO t1 VALUES (p1, p2, p3); END IF; / isql> EXECUTE proc1 (1, 'seoul', '20-JUN-2002'); Execute success. isql> EXECUTE proc1 (-3, 'daegu', '21-APR-2002'); Execute success. isql> SELECT * FROM t1; T1.I1 T1.I2 T1.I seoul 20-JUN row selected. 예제 2 CREATE TABLE t1 (i1 NUMBER, i2 VARCHAR(10), i3 DATE DEFAULT SYSDATE); ALTER PROCEDURE proc1 COMPILE; isql> EXECUTE proc1 (2, 'incheon', SYSDATE); Execute success. isql> SELECT * FROM t1; T1.I1 T1.I2 T1.I incheon 28-DEC row selected. 30 Stored Procedures Manual

31 DROP PROCEDURE 구문 drop_procedure_statement ::= DROP PROCEDURE procedure_name user_name. ; 기능 데이터베이스에서저장프로시저를삭제하는구문이다. 삭제하고자하는프로시저를다른저장프로시저에서참조하고있다하더라도, 그프로시저는삭제된다. 삭제되고없는저장프로시저나함수가호출될때 ALTIBASE HDB 는오류코드를반환한다. 예제 DROP PROCEDURE proc1; 저장프로시저 SQL 문 31

32 EXECUTE 구문 execute_procedure_statement ::= EXEC(UTE) procedure_name ; user_name. execute_function_statement ::= ( ) expression, EXEC(UTE) variable := function_name ; user_name. ( ) expression, 기능 저장프로시저또는저장함수를실행한다. 예제 CREATE OR REPLACE PROCEDURE proc1(eid INTEGER, amount NUMBER(10,2)) AS current_salary NUMBER(10,2); SELECT salary INTO current_salary FROM employees WHERE eno = eid; UPDATE employees SET salary = salary + amount WHERE eno = eid; / isql> SELECT * FROM employees WHERE eno = 15; ENO E_LASTNAME E_FIRSTNAME EMP_JOB 32 Stored Procedures Manual

33 EMP_TEL DNO SALARY SEX BIRTH JOIN_DATE STATUS Davenport Jason webmaster M H 1 row selected. isql> EXEC proc1(15, ); Execute success. isql> SELECT * FROM employees WHERE eno = 15; ENO E_LASTNAME E_FIRSTNAME EMP_JOB EMP_TEL DNO SALARY SEX BIRTH JOIN_DATE STATUS Davenport Jason webmaster M H 1 row selected. 저장프로시저 SQL 문 33

34 CREATE FUNCTION 구문 create_function::= CREATE OR FUNCTION REPLACE user_name. function_name ( parameter_declaration ), RETURN data_type AS DETERMINISTIC IS declaration_section statement END EXCEPTION exception_handler function_name parameter_declaration ::= parameter_name IN OUT data_type IN OUT DEFAULT := expression 기능 저장함수를새로생성하거나이미생성되어있는저장함수를 대체한다. 34 Stored Procedures Manual

35 parameter_declaration 저장프로시저와마찬가지로, 저장함수의인자도 IN, IN/OUT, OUT 인자로정의할수있다. 인자타입과주의사항에대한설명은 CREATE PROCEDURE 구문설명의 parameter_declaration 을참고하기바란다. RETURN data_type DETERMINISTIC 저장함수는저장프로시저와달리실행후하나의값을반환한다. 그러므로반드시반환데이터타입을명시해야한다. 동일한파라미터값으로함수를호출하면, 항상같은결과가반환됨을표시한다. DETERMINISTIC 으로선언한함수는 Check Constraint 와함수기반인덱스 (Function-Based Index) 에서사용할수있다. 이옵션을생략하면, non-deterministic 함수로선언된다. Declaration Section 3 장의 지역변수선언 절참고 Data Types 3 장의 지역변수선언 절참고 Exception Handler 9 장 Exception Handler 참고 CREATE FUNCTION 문의실행 저장함수생성구문의실행은저장프로시저구문과동일하다. CREATE PROCEDURE 절의 CREATE PROCEDURE 문의실행 을 참고하기바란다. 예제 CREATE TABLE t1( seq_no INTEGER, user_id VARCHAR(9), rate NUMBER, 저장프로시저 SQL 문 35

36 start_date DATE, end_date DATE); INSERT INTO t1 VALUES(0, ' ', , '23-May- 2002', '23-Apr-2002'); INSERT INTO t1 VALUES(0, ' ', 190, '23-Nov-2002', '23-Dec-2002'); INSERT INTO t1 VALUES(0, ' ', 100, '12-Dec-2001', '12-Jan-2001'); INSERT INTO t1 VALUES(0, ' ', 100, '11-Dec-2001', '11-Jan-2002'); INSERT INTO t1(seq_no, user_id, start_date, end_date) VALUES(0, ' ', '30-Oct-2001', '30-Nov-2001'); INSERT INTO t1 VALUES(0, ' ', , '30-Apr- 2002', '30-May-2002'); INSERT INTO t1 VALUES(0, ' ', , '30-Apr- 2002', '30-May-2002'); INSERT INTO t1 VALUES(1, ' ', 100, '30-Apr-2002', '30-May-2002'); INSERT INTO t1 VALUES(1, ' ', 115.0, '19-Jan- 2002', '19-Mar-2002'); INSERT INTO t1 VALUES(0, ' ', 120.0, '27-Jan- 2002', '27-Feb-2002'); INSERT INTO t1 VALUES(1, ' ', 150.0, '26-Nov- 2001', '26-Dec-2001'); isql> SELECT * FROM t1; T1.SEQ_NO T1.USER_ID T1.RATE T1.START_DATE T1.END_DATE /05/23 00:00: /04/23 00:00: /11/23 00:00: /12/23 00:00: /12/12 00:00: /01/12 00:00: /12/11 00:00: /01/11 00:00: /10/30 00:00: /11/30 00:00: /04/30 00:00: /05/30 00:00: /04/30 00:00: /05/30 00:00: /04/30 00:00: /05/30 00:00: /01/19 00:00: /03/19 00:00: /01/27 00:00: /02/27 00:00: /11/26 00:00: /12/26 00:00:00 11 rows selected. CREATE OR REPLACE FUNCTION get_rate (p1 IN CHAR(30), p2 IN CHAR(30), p3 IN VARCHAR(9)) RETURN NUMBER AS v_rate NUMBER; 36 Stored Procedures Manual

37 SELECT NVL(SUM(rate), 0) INTO v_rate FROM (SELECT rate FROM t1 WHERE start_date = TO_DATE(p1) AND end_date = TO_DATE(p2) AND user_id = '000000' p3 AND seq_no = 0); RETURN v_rate; / isql> VAR res NUMBER; isql> EXECUTE :res := get_rate('30-apr-2002', '30-May- 2002', '524'); Execute success. isql> PRINT res; NAME TYPE VALUE RES NUMBER 401 주의사항 제약조건 (constraint) 또는함수기반인덱스 (Function-based Index) 가사용하는함수의경우, 함수의반환값이바뀌면안되기때문에함수를재정의하는것자체가불가능하다. 또한함수기반인덱스가기반하는함수내에서호출되는함수를변경하거나제거하면, 함수기반인덱스가생성되어있는테이블에대한 DML 이실패할수있으므로사용자의주의가필요하다. 저장프로시저 SQL 문 37

38 ALTER FUNCTION 구문 alter_function_statement ::= ALTER FUNCTION funtion_name user_name. COMPILE ; 기능 저장프로시저와마찬가지로, 저장함수생성후에함수내에서참조하는데이터베이스객체의정의가변경되어현재이저장함수의실행계획으로는더이상실행할수없는경우에이저장함수는무효한상태라고한다. ALTER FUNCTION 문은저장함수를명시적으로재컴파일하여유효한상태의실행계획을다시생성하기위해사용된다. 더자세한설명은 ALTER PROCECURE 절을참고한다. 예제 ALTER FUNCTION get_dept_name COMPILE; 38 Stored Procedures Manual

39 DROP FUNCTION 구문 drop_function_statement ::= DROP FUNCTION function_name user_name. ; 기능 저장함수를삭제하는구문이다. 삭제하고자하는저장함수를다른저장프로시저또는저자함수에서참조하고있다하더라도, 그저장함수는삭제된다. 이미삭제된저장함수를참조하고있던임의의저장프로시저또는저장함수가실행될때 ALTIBASE HDB 는오류를출력한다. 예제 DROP FUNCTION get_dept_name; 주의사항 제약조건 (constraints) 또는함수기반인덱스가참조하는함수는 삭제가불가능하다. 저장프로시저 SQL 문 39

40

41 3. 저장프로시저블록 저장프로시저와저장함수는한개이상의블록으로구성된다. 이 장에서는블록을사용해서저장프로시저내에절차화된프로그램을 작성하는방법을설명한다. 저장프로시저블록 41

42 저장프로시저블록 구문 block ::= << label_name >> DECLARE declaration_section statement EXCEPTION exception_handler END label_name ; statement ::= << label_name >> print_statement sql_statement control_flow_statement open_cursor_statement open_for_statement fetch_statement close_cursor_statement assignment_statement raise_statement return_statement block 42 Stored Procedures Manual

43 sql_statement ::= select_into_statement insert_statement delete_statement update_statement move_statement merge_statement commit_statement rollback_statement execute_imme_statement enqueue_statement dequeue_statement 블록은크게선언부 (Declare Section), 블록바디 (Block Body), 예외처리부 (Exception Handler Section) 의세부분으로나뉘어진다. DECLARE,, EXCEPTION 등의키워드뒤에는세미콜론을사용하지않지만 END 및기타모든프로시저내의명령문뒤에는세미콜론이있어야한다. 저장프로시저의코드에주석처리를할수있다. 단일행주석에는 -- 를문장앞에붙이고, 여러행을주석처리할경우는 /* 와 */ 사이에주석처리할문장이놓이도록작성한다. 이장에서는선언부와블록바디에사용할수있는구문중 SELECT INTO 문, 변수할당문, LABEL 문, PRINT 문, RETURN 문에대해서설명한다. 저장프로시저내에서사용가능한흐름제어문, 커서관련문, 예외처리에관련된내용은다음장에서순서대로설명하고있다. 그외 SQL 문들에대한자세한내용은 SQL Reference 을참조한다. 선언부 선언부는메인블록에서는 AS 와 키워드사이에위치하며, 하위블록에서는 DECLARE 와 키워드사이에위치한다. 해당블록내에서사용하는지역변수, 커서와사용자정의예외등을선언한다. 저장프로시저블록 43

44 이장에서는지역변수만을설명한다. 커서와예외처리는 5 장 커서와 9 장예외처리에서각각설명한다. 블록바디 과 END 사이의부분으로 SQL 문과흐름제어문을포함한다. 블록바디내에기술가능한 SQL 문과흐름제어문은다음과같다. DML 문 : SELECT/INSERT/DELETE/UPDATE/MOVE/MERGE/ENQUEUE/D EQUEUE 트랜잭션처리문 : COMMIT/ROLLBACK 흐름제어문 : IF, CASE, FOR, LOOP, WHILE, EXIT, CONTINUE, NULL 할당문 출력문 : PRINT, RETURN 커서관련문 : OPEN, FETCH, CLOSE, Cursor FOR LOOP 동적 SQL 문 : EXECUTE IMMEDIATE 예외처리구문 : RAISE, RAISE_APPLICATION_ERROR 저장프로시저의장점중하나는 SQL 문과달리블록을사용하여명령문을중첩할수있다는점이다. 명령문을사용할수있는위치에는블록을중첩할수있으므로, 명령문을블록으로만들어서중첩시키면된다. 예외처리부 EXCEPTION 과 END 사이의부분으로저장프로시저또는함수실행 중에오류가발생했을때처리할루틴을기술한다. 44 Stored Procedures Manual

45 지역변수선언 구문 declaration_section ::= variable_declaration constant_declaration cursor_declaration exception_declaration variable_declaration ::= variable_name data_type DEFAULT := expression constant_declaration ::= DEFAULT constant_name CONSTANT data_type expression := data_type ::= sql_data_type type_attribute rowtype_attribute 저장프로시저블록 45

46 기능 variable_name 변수의이름을명시할때사용된다. 변수의이름은하나의블록범위내에서유일해야한다. 칼럼과같은이름을가지는변수를 SQL 문장내에서사용할경우, 이것은칼럼명으로인식된다. 다음의예에서 eno 는칼럼명으로 인식되어 employees 테이블의모든레코드가삭제된다. DECLARE eno INTEGER := 100; DELETE FROM employees WHERE eno = eno; 다음과같은방법으로모호성을없앨수있다. <<del_block>> DECLARE eno INTEGER := 100; DELETE FROM employees WHERE eno = del_block.eno; 블록이름에관한설명은이장의 LABEL 절을참고한다. 46 Stored Procedures Manual

47 data_type 변수의데이터타입을명시한다. 저장프로시저내에서사용가능한데이터타입은아래와같다. SQL 문에서사용할수데이터타입 : 2 장의 " 데이터타입 " 참조 BOOLEAN 타입 : 2 장의 " 데이터타입 " 참조 %TYPE 속성을사용해서이미데이터타입이지정된칼럼이나변수와같은타입사용 %ROWTYPE 속성을사용해서여러개의칼럼이모인레코드타입을정의 사용자정의타입 : "6 장사용자정의타입 " 참조 %TYPE 과 %ROWTYPE 속성은테이블정의가변경될때마다저장프로시저내에서코드를변경해야하는번거로움을예방한다. 즉, 칼럼의데이터타입이변경될때, %TYPE 속성을사용해서정의된변수는자동으로변경된타입에맞추어진다. 이는데이터의독립성을실현하고유지보수비용을낮추는데기여한다. CONSTANT 이옵션은특정변수를값을할당할수없는상수로사용하고자하는경우에사용할수있다. 이렇게정의된변수는읽기전용변수로만사용할수있다. 다음과같이 max_val 을선언하면 max_val 에는임의의값을할당할수없고선언시할당한 100 의값을가지는상수처럼취급된다. max_val CONSTANT integer := 100; DEFAULT Cursor Declaration 다음과같이변수선언시초기값을설정할때사용된다. curr_val INTEGER DEFAULT 100; count_val INTEGER := 0; 5 장의 CURSOR 절참고 Exception Declaration 9 장의 EXCEPTION 절참고 저장프로시저블록 47

48 중첩블록및변수의범위 선언부에명시한변수들의영향력은자신이선언된 BLOCK 문의 에서시작되고 END 에서종료된다. 만약 block2 가 block1 내에정의되어있고각각의블록내에같은이름을가지는 v_result 변수를선언하였다면, block2 의밖에서사용되는 v_result 는 block1 에정의된변수를참조하고 block2 내에서사용된 v_result 는 block2 에서선언한변수이다. 아래에 block2 ( 중첩블록 ) 에있는변수 y 는 block1 ( 외부블록 ) 에있는변수 x 를참조할수있지만, 변수 x 는변수 y 를참조할수없다. 중첩블록내에외부블록에있는변수 x 와동일한이름이주어지면그값은중첩블록내에서만유효하다. /* start of block1 */ DECLARE v_result¹ integer; x integer; x 의범위... v_result¹ := 1;... /* start of sub-block (block2) */ DECLARE v_result² integer; y number; v_result¹ 값을참조할수있는영역 y 의범위... v_result² := 2;... /* end of block2 */... v_result¹ := 3;... /* end of block1 */ v_result² 값을참조할수있는영역 v_result¹ 값을참조할수있는영역 48 Stored Procedures Manual

49 제약조건 다음과같은기능은변수선언부에서지원하지않는기능들이다. 변수에 NOT NULL 속성을지정할수없다. 여러개의변수들을한꺼번에선언할수없다. 즉다음과같이선언할수없다. i, j, k INTEGER; 예제 %TYPE 사용 DECLARE my_title books.title%type; my_title 은 books 테이블의 title 칼럼과같은데이터타입을가지는 변수로정의된다. %ROWTYPE 사용 DECLARE dept_rec departments%rowtype dept_rec 은레코드타입의변수로서 departments 테이블또는 departments 라는이름의커서와동일한레코드타입을가지게된다. 예제 1 CONSTANT 와 %ROWTYPE 을사용해서변수를선언하는예제이다. CREATE TABLE t1(i1 INTEGER, i2 INTEGER); CREATE OR REPLACE PROCEDURE proc1 AS v1 constant INTEGER := 1; v2 constant t1.i1%type := 1; INSERT INTO t1 VALUES (v1, v2); / EXEC proc1; isql> SELECT * FROM t1; T1.I1 T1.I row selected. 저장프로시저블록 49

50 --DROP TABLE t1; CREATE TABLE t1 (i1 INTEGER, i2 INTEGER, i3 INTEGER); INSERT INTO t1 VALUES(1,1,1); CREATE OR REPLACE PROCEDURE proc1 AS r1 t1%rowtype; INSERT INTO t1 VALUES(3,3,3); <<s>> DECLARE r1 t1%rowtype; SELECT i1, i2, i3 INTO s.r1.i1, s.r1.i2, s.r1.i3 FROM t1 WHERE i1 = 1; INSERT INTO t1 VALUES (s.r1.i1, s.r1.i2, s.r1.i3); / isql> EXEC proc1; Execute success. isql> SELECT * FROM t1; T1.I1 T1.I2 T1.I rows selected. 예제 2 %ROWTYPE 속성을사용하는예제이다. CREATE TABLE emp( eno INTEGER, ename CHAR(10), emp_job CHAR(15), join_date DATE, salary NUMBER(10,2), dno BYTE(2)); CREATE TABLE emp401( eno INTEGER, ename CHAR(10), emp_job CHAR(15), join_date DATE, leave_date DATE, salary NUMBER(10,2), dno BYTE(2), fund NUMBER(10,2) DEFAULT 0); INSERT INTO emp VALUES (10, 'DKLEE', 'ENGINEER', '01-Jul-2000', , BYTE'D001'); 50 Stored Procedures Manual

51 INSERT INTO emp VALUES (20, 'SWMYUNG', 'MANAGER', '01-Nov-1999', , BYTE'C002'); CREATE OR REPLACE PROCEDURE proc1(p1 INTEGER) AS DECLARE emp_rec emp%rowtype; SELECT * INTO emp_rec FROM emp WHERE eno = p1; INSERT INTO emp401(eno, ename, emp_job, join_date, leave_date, salary, dno) VALUES(emp_rec.eno, emp_rec.ename, emp_rec.emp_job, emp_rec.join_date, sysdate, emp_rec.salary, emp_rec.dno); / isql> EXEC proc1(10); Execute success. isql> SELECT * FROM emp401; EMP401.ENO EMP401.ENAME EMP401.EMP_JOB EMP401.JOIN_DATE EMP401.LEAVE_DATE EMP401.SALARY EMP401.DNO EMP401.FUND DKLEE ENGINEER 2000/07/01 00:00: /01/27 16:26: D row selected. 저장프로시저블록 51

52 SELECT INTO 구문 select_list 와 rest_of_select_statement 는 SELECT 구문의문법과동일하므로 SQL Reference 을참고한다. 기능 저장프로시저에서 SELECT 문을사용할경우, SELECT 문은 INTO 절을포함해야한다. 저장프로시저또는함수내에서 INTO 절을가지는 SELECT 문은 52 Stored Procedures Manual

53 하나의레코드만검색할수있다. INTO 절이사용된 SELECT 구문이여러행을반환하거나한행도반환하지않으면오류가발생한다. SELECT 절의 select_list 와 INTO 절의상응하는 variable_name 은개수가동일해야하며호환가능한데이터타입이어야한다. %ROWTYPE 속성으로정의한변수를 INTO 절에사용하는경우에도 %ROWTYPE 변수내의칼럼의개수와 select_list 의칼럼의개수가동일해야하며, 상응하는칼럼의데이터타입은호환가능해야한다. 저장프로시저는표준예외사항이발생하는경우오류를발생시킨다. NO_DATA_FOUND 및 TOO_MANY_ROWS 등의예외사항을사용하여블록의예외처리부에서오류를처리할수있다. 예외처리에대한상세한설명은 9 장예외처리를참조한다. BULK COLLECT 절 한번에한레코드씩가져오는 INTO 절과달리, BULK COLLECT 절은 SELECT 문의수행결과를한꺼번에가져온다. INTO 뒤에는아래두종류의바인드변수를지정할수있다. array_record_name SELECT 문이반환하는레코드들을저장할 RECORD 타입의 associative array 변수를지정한다. array_variable_name SELECT 리스트의각칼럼에대해배열변수를지정한다. 각배열변수의데이터타입은 SELECT 리스트내에서대응하는칼럼의데이터타입과호환되어야하며, 배열변수의개수는 SELECT 리스트의칼럼개수와동일해야한다. BULK COLLECT 절을사용해서질의문의결과집합을한번에배열로가져오는것이 loop 문을사용해서결과행을한건씩가져오는것보다더효율적이다. 예제 예제 1 CREATE TABLE t1(i1 INTEGER, i2 INTEGER, i3 INTEGER); INSERT INTO t1 VALUES(1,1,1); CREATE OR REPLACE PROCEDURE proc1 AS v1 INTEGER; r1 t1%rowtype; 저장프로시저블록 53

54 INSERT INTO t1 VALUES (3,3,3); <<s>> DECLARE v1 proc1.r1.i1%type; r1 t1%rowtype; SELECT i1,i2,i3 INTO s.r1.i1, s.r1.i2, s.r1.i3 FROM t1 WHERE i1 = 1; INSERT INTO t1 VALUES(s.r1.i1, s.r1.i2, s.r1.i3); / isql> EXEC proc1; Execute success. isql> SELECT * FROM t1; T1.I1 T1.I2 T1.I rows selected. 예제 2 CREATE TABLE t1 (i1 INTEGER, i2 INTEGER, i3 INTEGER); INSERT INTO t1 VALUES(100, 100, 100); CREATE SEQUENCE seq1; CREATE SEQUENCE seq2; CREATE SEQUENCE seq3; CREATE OR REPLACE PROCEDURE proc1 AS <<seq1>> DECLARE nextval INTEGER; nextval := 10; INSERT INTO t1 VALUES (seq1.nextval,0,0); / CREATE OR REPLACE PROCEDURE proc2 AS INSERT INTO t1 VALUES (seq1.nextval, seq2.nextval, seq3.nextval); INSERT INTO t1 VALUES (seq1.nextval, seq2.nextval, seq3.nextval); INSERT INTO t1 VALUES (seq1.nextval, seq2.nextval, seq3.nextval); 54 Stored Procedures Manual

55 / CREATE OR REPLACE PROCEDURE proc3 AS v1 INTEGER; v2 INTEGER; v3 INTEGER; SELECT seq1.currval, seq2.nextval, seq3.nextval INTO v1, v2, v3 FROM t1 WHERE i1 = 100; INSERT INTO t1 VALUES (v1, v2, v3); SELECT seq1.currval, seq1.nextval, seq1.currval INTO v1, v2, v3 FROM t1 WHERE i1 = 100; INSERT INTO t1 VALUES (v1, v2, v3); SELECT seq1.currval, seq2.nextval, seq3.nextval INTO v1, v2, v3 FROM t1 WHERE i1 = 100; INSERT INTO t1 VALUES (v1, v2, v3); / EXEC proc1; SELECT * FROM t1; EXEC proc2; SELECT * FROM t1; EXEC proc3; SELECT * FROM t1; EXEC proc2; SELECT * FROM t1; EXEC proc3; isql> SELECT * FROM t1; T1.I1 T1.I2 T1.I rows selected. 예제 3 CREATE TABLE t1(i1 INTEGER, i2 INTEGER, i3 INTEGER); CREATE TABLE t2(i1 INTEGER, i2 INTEGER, i3 INTEGER); INSERT INTO t1 VALUES (1,1,1); INSERT INTO t1 VALUES (2,2,2); CREATE OR REPLACE PROCEDURE proc1 저장프로시저블록 55

56 AS v1 INTEGER; r1 t1%rowtype; SELECT i1 INTO v1 FROM t1 WHERE i1 = 1; SELECT * INTO r1 FROM t1 WHERE i1 = 1; INSERT INTO t2 VALUES (v1, r1.i2, r1.i3); <<s>> DECLARE r1 t1%rowtype; SELECT i1, i2, i3 INTO s.r1.i1, s.r1.i2, s.r1.i3 FROM t1 WHERE i1 = 2; INSERT INTO t2 VALUES (s.r1.i1, s.r1.i2, s.r1.i3); / isql> EXEC proc1; Execute success. isql> SELECT * FROM t2; T2.I1 T2.I2 T2.I rows selected. 예제 4 CREATE TABLE t3(i1 INTEGER); CREATE OR REPLACE PROCEDURE proc1 AS max_qty orders.qty%type; SELECT MAX(qty) INTO max_qty FROM orders; INSERT INTO t3 VALUES(max_qty); / isql> exec proc1; Execute success isql> SELECT * FROM t3; T3.I row selected. 예제 5 56 Stored Procedures Manual CREATE TABLE delayed_processing( cno CHAR(14), order_date DATE); CREATE OR REPLACE PROCEDURE proc1 AS de_cno CHAR(14);

57 de_order_date DATE; INSERT INTO delayed_processing SELECT cno, order_date INTO de_cno, de_order_date FROM orders WHERE processing = 'D'; / isql> EXEC proc1; Execute success. isql> SELECT * FROM delayed_processing; DELAYED_PROCESSING.CNO DELAYED_PROCESSING.ORDER_DATE /11/29 00:00: /11/29 00:00:00 2 rows selected. 예제 6 create table t1(i1 int,i2 int); insert into t1 values(1,1); insert into t1 values(2,2); insert into t1 values(3,3); CREATE OR REPLACE PROCEDURE proc1 AS type myvarchararr is table of varchar(10) index by integer; v2 myvarchararr; SELECT i2 BULK COLLECT INTO v2 FROM t1; FOR i IN v2.first().. v2.last() LOOP println('v2[' i ']=' v2[i]); END LOOP; / isql> EXEC proc1(); v2[1]=1 v2[2]=2 v2[3]=3 Execute success. 저장프로시저블록 57

58 RETURNING INTO 절 구문 returning_clause ::= RETURN RETURNING expr, into_clause bulk_collect_clause into_clause ::= INTO record_name variable_name, bulk_collect_clause ::= BULK COLLECT INTO array_record_name array_variable_name ; 기능 RETURNING INTO 절은그절이속해있는 DELETE, INSERT, 또는 UPDATE 문의실행으로영향을받은레코드값을저장할변수를 명시한다. 변수는개별적인변수이거나배열변수일수있다. expr 각 expr 는 DML 문에의해영향을받는칼럼의이름이거나칼럼 타입과호환되는데이터표현식이어야한다. into_clause INTO 절은변경된레코드의값들이각값에대응하는 58 Stored Procedures Manual

59 variable_name 변수로저장될것을지시한다. variable_name 각 variable_name 은조회된 expr 값을저장할 PSM 변수이다. RECORD 타입의변수를사용하는경우를제외하면, 변수의개수는 expr 리스트의 expr 개수와동일해야한다. PSM 변수의타입은대응하는 expr 의타입과호환되어야한다. record_name 구문이반환하는행을저장할 RECORD 타입변수의이름이다. bulk_collect_clause 한번에한레코드씩가져오는 INTO 절과달리, BULK COLLECT 절은구문이반환하는행들을한꺼번에가져온다. INTO 뒤에는아래두종류의바인드변수를지정할수있다. array_record_name RECORD 타입의 associative array 변수를지정한다. array_variable_name expr 리스트의각칼럼에대응하는배열변수를지정한다. 각배열변수의데이터타입은 expr 리스트내에서대응하는칼럼의데이터타입과호환되어야하며, 배열변수의개수는 expr 리스트의칼럼개수와동일해야한다. 예제 예제 1 isql> create table employees ( eno integer, ename varchar(20)); Create success. isql> create or replace procedure proc1 as x1 integer; x2 varchar(30); begin insert into employees values (1, 'jake') return eno, ename into x1, x2; println( 'x1=' x1 ', x2=' x2); end; / Create success. 저장프로시저블록 59

60 isql> exec proc1; x1=1, x2=jake Execute success. 예제 2 isql> create table employees ( eno integer, ename varchar(20)); Create success. isql> create or replace procedure proc1 as type myintarr is table of integer index by integer; type myvarchararr is table of varchar(30) index by integer; v1 myintarr; v2 myvarchararr; begin insert into employees values (1, 'jake') return eno, ename bulk collect into v1, v2; for i in v1.first().. v1.last() loop println( 'v1[' i ']=' v1[i] ); end loop; for i in v2.first().. v2.last() loop println( 'v2[' i ']=' v2[i] ); end loop; end; / Create success. isql> exec proc1; v1[1]=1 v2[1]=jake Execute success. 예제 3 60 Stored Procedures Manual isql> create table employees ( eno integer, ename varchar(20)); Create success. isql> create or replace procedure proc1 as type myrec is record( i1 integer, i2 varchar(30) ); type myrecarr is table of myrec index by integer; r1 myrecarr; s1 myrec; begin insert into employees values (1, 'jake') return eno, ename bulk collect into r1; for i in r1.first().. r1.last() loop s1 := r1[i]; println( 'r1[' i '].eno=' s1.i1 ', r1[' i '].ename=' s1.i2 ); end loop; end; /

61 Create success. isql> exec proc1; r1[1].eno=1, r1[1].ename=jake Execute success. 예제 4 create table employees ( eno integer, ename varchar(20)); insert into employees values (1, 'jake'); insert into employees values (2, 'nikita'); insert into employees values (3, 'dana'); isql> create or replace procedure proc1 as x1 integer; x2 varchar(30); begin delete from employees where eno = 1 return eno, ename into x1, x2; println( 'x1=' x1 ', x2=' x2); end; / Create success. isql> exec proc1; x1=1, x2=jake Execute success. 예제 5 create table employees ( eno integer, ename varchar(20)); insert into employees values (1, 'no1.jake'); insert into employees values (1, 'no2.jake'); insert into employees values (1, 'no3.jake'); isql> create or replace procedure proc1 as type myintarr is table of integer index by integer; type myvarchararr is table of varchar(30) index by integer; v1 myintarr; v2 myvarchararr; begin delete from employees where eno = 1 return eno, ename bulk collect into v1, v2; for i in v1.first().. v1.last() loop println( 'v1[' i ']=' v1[i] ); end loop; for i in v2.first().. v2.last() loop println( 'v2[' i ']=' v2[i] ); end loop; end; / Create success. 저장프로시저블록 61

62 isql> exec proc1; v1[1]=1 v1[2]=1 v1[3]=1 v2[1]=no1.jake v2[2]=no2.jake v2[3]=no3.jake Execute success. 예제 6 create table employees ( eno integer, ename varchar(20)); insert into employees values (1, 'no1.jake'); insert into employees values (1, 'no2.jake'); insert into employees values (1, 'no3.jake'); isql> create or replace procedure proc1 as type myrec is record( i1 integer, i2 varchar(30) ); type myrecarr is table of myrec index by integer; r1 myrecarr; s1 myrec; begin delete from employees where eno = 1 return eno, ename bulk collect into r1; for i in r1.first().. r1.last() loop s1 := r1[i]; println( 'r1[' i '].eno=' s1.i1 ', r1[' i '].ename=' s1.i2 ); end loop; end; / Create success. isql> exec proc1; r1[1].eno=1, r1[1].ename=no1.jake r1[2].eno=1, r1[2].ename=no2.jake r1[3].eno=1, r1[3].ename=no3.jake Execute success. 예제 7 62 Stored Procedures Manual create table employees ( eno integer, ename varchar(20)); insert into employees values (1, 'jake'); insert into employees values (2, 'nikita'); insert into employees values (3, 'dana'); isql> create or replace procedure proc1 as x1 integer; x2 varchar(30); begin update employees set ename = 'mikhaila' where eno = 1 return eno, ename into x1, x2; println( 'x1=' x1 ', x2=' x2); end;

63 / Create success. isql> exec proc1; x1=1, x2=mikhaila Execute success. 예제 8 create table employees ( eno integer, ename varchar(20)); insert into employees values (1, 'no1.jake'); insert into employees values (1, 'no2.jake'); insert into employees values (1, 'no3.jake'); isql> create or replace procedure proc1 as type myintarr is table of integer index by integer; type myvarchararr is table of varchar(30) index by integer; v1 myintarr; v2 myvarchararr; begin update employees set eno = 5, ename = 'mikhaila' where eno = 1 return eno, ename bulk collect into v1, v2; for i in v1.first().. v1.last() loop println( 'v1[' i ']=' v1[i] ); end loop; for i in v2.first().. v2.last() loop println( 'v2[' i ']=' v2[i] ); end loop; end; / Create success. isql> exec proc1; v1[1]=5 v1[2]=5 v1[3]=5 v2[1]=mikhaila v2[2]=mikhaila v2[3]=mikhaila Execute success. 예제 9 create table employees ( eno integer, ename varchar(20)); insert into employees values (1, 'no1.jake'); insert into employees values (1, 'no2.jake'); insert into employees values (1, 'no3.jake'); isql> create or replace procedure proc1 as type myrec is record( i1 integer, i2 varchar(30) ); 저장프로시저블록 63

64 type myrecarr is table of myrec index by integer; r1 myrecarr; s1 myrec; begin update employees set eno = 5, ename = 'mikhaila' where eno = 1 return eno, ename bulk collect into r1; for i in r1.first().. r1.last() loop s1 := r1[i]; println( 'r1[' i '].eno=' s1.i1 ', r1[' i '].ename=' s1.i2 ); end loop; end; / Create success. isql> exec proc1; r1[1].eno=5, r1[1].ename=mikhaila r1[2].eno=5, r1[2].ename=mikhaila r1[3].eno=5, r1[3].ename=mikhaila Execute success. 64 Stored Procedures Manual

65 할당문 구문 assignment_statement ::= variable_name parameter_name := record_name variable_name. column_name expression ; SET parameter_name = record_name. column_name 기능 지역변수, OUT 또는 IN/OUT 형의인자에값을할당하고자할때사용하는할당문이다. 다음의두가지방법을사용해서변수또는인자에값을할당할수있다. := 연산자사용 variable_name := value; parameter_name := value; SET 키워드사용 SET variable_name = value; SET parameter_name = value; %ROWTYPE 속성을사용해서정의된 RECORD 타입변수의각칼럼값은 record_variable_name.field_name 으로참조할수있다. 저장프로시저블록 65

66 예제 예제 1 CREATE TABLE t1(i1 INTEGER, i2 INTEGER, i3 INTEGER); CREATE OR REPLACE PROCEDURE proc1 AS i INTEGER; i := 5; WHILE i <= 10 LOOP INSERT INTO t1 VALUES (i, i+1, i+2); i := i + 1; END LOOP; / isql> EXEC proc1; Execute success. isql> SELECT * FROM t1; T1.I1 T1.I2 T1.I rows selected. 예제 2 CREATE TABLE t1(i1 INTEGER, i2 INTEGER, i3 INTEGER); CREATE OR REPLACE FUNCTION plus20(p1 IN INTEGER) RETURN INTEGER AS v1 INTEGER; v1 := p1 + 20; RETURN v1; / CREATE OR REPLACE PROCEDURE proc1 AS v1 INTEGER; in_arg INTEGER; in_arg := 80; v1 := plus20(in_arg); INSERT INTO t1 VALUES (v1, v1, v1); / 66 Stored Procedures Manual

67 isql> EXEC proc1; Execute success. isql> SELECT * FROM t1; T1.I1 T1.I2 T1.I row selected. 저장프로시저블록 67

68 LABEL LABLE 문은저장프로시저내부의특정위치에명칭을지정하는데 사용된다. LABEL 은블록내에다음과같이지정할수있다. << User_defined_label_name >> 기능 사용자가정의한 LABEL 명은다음 3 가지경우에사용된다. 같은이름의여러변수들의범위를제한하거나, 변수이름과칼럼이름이같아서발생하는모호성을없애기위한경우 중첩된 LOOP 에서빠져나오고싶은경우 GOTO 문장을사용하는경우 제약조건 1. 동일블록내에같은이름의 LABEL 이존재하면안된다. 아래 예제의경우 LABEL1 이동일블록내에두번지정되어컴파일시 에러가출력된다. CREATE OR REPLACE PROCEDURE PROC1 AS V1 INTEGER; <<LABEL1>> V1 := 1; <<LABEL1>> V1 := V1 + 1; 2. 같은이름을가지는변수의범위를제한하기위하여사용하는 경우, 반드시 DECLARE 문위에 LABEL 을선언해야한다. 단, LABEL 을여러개선언하는것은허용된다. 아래예제에서는 (1) 에서 선언한변수 V1 이 2 번참조된다. CREATE OR REPLACE PROCEDURE PROC1 AS V1 INTEGER; <<LABEL1>> --- LABLE 지정 <<LABEL2>> DECLARE V1 INTEGER;...(1) 68 Stored Procedures Manual

69 / <<LABEL3>> DECLARE V1 INTEGER;...(2) LABEL1.V1 := 1; -- (1) 의 V1 참조 LABEL2.V1 := 2; LABEL3.V1 := 3; -- (1) 의 V1 참조 -- (2) 의 V1 참조 아래예제의경우 DECLARE 문위에 LABEL 을지정하지않아서 에러가나게된다. CREATE OR REPLACE PROCEDURE PROC1 AS V1 INTEGER; <<LABEL1>> V1 := 1; DECLARE V1 INTEGER; LABEL1.V1 := 1; --- ERROR 의경우와유사하게중첩된 LOOP 에서빠져나올때사용하는 경우반드시 LOOP 시작직전에 LABEL 을선언해야한다. LOOP 전에 LABEL 을여러개선언하는것은허용된다. CREATE OR REPLACE PROCEDURE PROC1 AS V1 INTEGER; V1 := 0; <<LABEL1>> <<LABEL2>> FOR I IN LOOP V1 := V1 + 1; FOR I IN LOOP V1 := V1 + 1; EXIT LABEL1 WHEN V1 = 30; END LOOP; END LOOP; / 아래예제는한 LABEL 이 LOOP 시작직전에선언되지않은 경우이다. 이 LABEL 을이용해서는중첩된 LOOP 를빠져나올수 없으므로, 저장프로시저컴파일시에러가발생하게된다. CREATE OR REPLACE PROCEDURE PROC1 AS V1 INTEGER; <<LABEL1>> V1 := 0; <<LABEL2>> 저장프로시저블록 69

70 70 Stored Procedures Manual FOR I IN LOOP V1 := V1 + 1; FOR I IN LOOP V1 := V1 + 1; EXIT LABEL1 WHEN V1 = 30; -- ERROR END LOOP; END LOOP; /

71 PRINT 구문 print_statement ::= PRINT PRINTLN ( string ) ; 기능 PRINT 구문은저장프로시저실행시에사용자가원하는텍스트를해당프로시저를호출한클라이언트에게출력한다. PRINT 구문은주로디버깅및테스트목적으로사용하도록 ALTIBASE HDB 가제공하는시스템프로시저이다. PRINTLN 은 PRINT 와동일하나출력메시지의마지막에개행문자 ( 윈도우는 \r\n, 유닉스는 \n ) 를붙여서출력한다. PRINT, PRINTLN 의소유자는 SYSTEM_ 이므로사용시아래처럼이를명시해도된다 : SYSTEM_.PRINTLN( Hello World ); 그러나이들에대한 PUBLIC 시노님이기본적으로생성되어있기때문에 SYSTEM_ 을굳이명시하지않아도된다. String 클라이언트로출력할문자열을기술한다. 사용자메시지출력시문자열과함께변수값등을출력하고싶은경우에는예제 2 와같이문자열연결연산자인 를사용해서하나의문자열로만들어서출력하면된다. 저장프로시저블록 71

72 예제 예제 1 CREATE OR REPLACE PROCEDURE proc1 AS v1 BIGINT; v1 := BIGINT' '; system_.println ('1'); system_.println (v1); system_.println ('2'); / isql> EXEC proc1; Execute success. 예제 2 CREATE OR REPLACE PROCEDURE proc1 AS eno_count INTEGER; SELECT COUNT(eno) INTO eno_count FROM employees; println('the NUMBER of Employees: ' eno_count); / isql> EXEC proc1; The NUMBER of Employees: 20 Execute success. 예제 3 다음예제는쿼리결과를형식에맞춰출력하기위해 PRINT 와 PRINTLN 구문과함께 loop 를사용하는방법을보여준다. CREATE OR REPLACE PROCEDURE showprocedures AS CURSOR c1 IS SELECT SYSTEM_.sys_procedures_.proc_name, decode(system_.sys_procedures_.object_type, 0, 'Procedure',1,'Function') FROM system_.sys_procedures_ ; v1 CHAR(40); v2 CHAR(20); OPEN c1; SYSTEM_.PRINTLN(' '); SYSTEM_.PRINT('Proc_Name'); SYSTEM_.PRINTLN(' Procedure/Function'); SYSTEM_.PRINTLN(' '); 72 Stored Procedures Manual

73 LOOP FETCH C1 INTO v1, v2; EXIT WHEN C1%NOTFOUND; PRINT(' '); PRINT(v1); PRINTLN(v2); END LOOP; PRINTLN(' '); CLOSE c1; / isql> EXEC showprocedures; Proc_Name Procedure/Function PRINT PRINTLN.. Procedure Procedure SHOWPROCEDURES Procedure Execute success. 저장프로시저블록 73

74 RETURN 구문 return_statement ::= RETURN expression ( ) ; 기능 저장프로시저의수행을도중에중단하거나, 저장함수에서값을반환하고수행을중단하려하는경우에사용하는제어문이다. 저장프로시저는 RETURN 문에반환할값을지정하게되면에러가발생한다. 반면저장함수는항상값을반환해야하기때문에 RETURN 문에반환할값을명시하여야한다. expression 저장함수의경우에반환할값을기술한다. 반환값은연산식의 형태로도기술할수있다. 예제 예제 1 CREATE TABLE t1(i1 INTEGER, i2 INTEGER, i3 INTEGER); INSERT INTO t1 VALUES(1,1,1); CREATE OR REPLACE FUNCTION times_half(p1 IN INTEGER) RETURN INTEGER AS RETURN p1 / 2; / 74 Stored Procedures Manual

75 isql> SELECT times_half(times_half(8)) FROM t1; TIMES_HALF(TIMES_HALF(8)) row selected. 예제 2 CREATE TABLE t1(i1 INTEGER, i2 INTEGER, i3 INTEGER); INSERT INTO t1 VALUES(1,1,1); INSERT INTO t1 VALUES(10,10,10); INSERT INTO t1 VALUES(100,100,100); CREATE OR REPLACE FUNCTION max_all_val RETURN INTEGER AS v1 INTEGER; SELECT MAX(i1) INTO v1 FROM t1; RETURN v1; / isql> SELECT max_all_val FROM t1; MAX_ALL_VAL rows selected. 예제 3 CREATE TABLE t4(i1 INTEGER, i2 INTEGER); INSERT INTO t4 VALUES(3, 0); INSERT INTO t4 VALUES(2, 0); INSERT INTO t4 VALUES(1, 0); INSERT INTO t4 VALUES(0, 0); CREATE OR REPLACE FUNCTION func_plus_10(p1 INTEGER) RETURN INTEGER AS RETURN p1+10; / isql> SELECT func_plus_10(i1) FROM t4; FUNC_PLUS_10(I1) rows selected. 저장프로시저블록 75

76

77 4. 흐름제어 흐름제어 77

78 개요 이장은저장프로시저바디내에서의흐름제어방법을설명한다. 구문 control_flow_statement ::= if_statement case_statement simple_loop_statement while_loop_statement for_loop_statement exit_statement continue_statement null_statement 저장프로시저에서사용할수있는흐름제어문은다음과같다. 조건분기문인 IF 문과 CASE 문 조건을만족할때반복수행하는 LOOP 문, WHILE 문과 FOR 문 반복수행문의흐름을제어하는 EXIT 문와 CONTINUE 문 아무것도수행하지않음을명시적으로나타낼수있는 NULL 문 특정위치로이동할수있는 GOTO 문 제약사항 부질의 (subquery) 가포함된조건은 IF 문또는 CASE 문의조건으로사용될수없다. 단, 아래의조건은예외이다 : EXIST (subquery) NOT EXIST (subquery) 78 Stored Procedures Manual

79 IF 구문 if_statement ::= IF condition THEN statement ELS(E)IF condition THEN statement ELSE statement END IF ; 기능 조건을만족하는경우와그렇지않은경우에따라처리흐름을분기하는조건분기문이다. IF 절은조건은검사해서 true 이면 THEN 절로제어를이동하고, false 이거나 NULL 이면 ELSE 절로제어를이동한다. condition 조건절에는 SQL 문의 WHERE 절에서사용가능한모든 술어 (predicate) 들을사용할수있다. 지원하는술어들에대한상세 내용은 SQL Reference 의 SELECT 구문을참조한다. ELS(E)IF ELS(E)IF 절의경우이전의 IF 문의조건과는다른조건을명시할수 있다. 흐름제어 79

80 ELSIF 는한단어이며하나의 IF 문내에여러개의 ELS(E)IF 절을 사용할수있다. ELSE 앞서 IF 와 ELS(E)IF 에서열거된모든조건을만족하지않는경우 ELSE 절의문장이수행된다. ELSE 절은명시하거나, 하나의 IF 문내에 한번만기술가능하다. 중첩 IF 문 IF 문은다른 IF 문내에중첩되어기술할수있다. 즉, IF 문은다른 IF, ELS(E)IF 또는 ELSE 문의결과로수행되는일련의작업내에포함될 수있다. 각 IF 문은 END IF 로종료해야한다. 예제 예제 1 CREATE OR REPLACE PROCEDURE proc1 AS CURSOR c1 IS SELECT eno, emp_job, salary FROM employees; emp_id employee.eno%type; e_job employee.emp_job%type; e_salary employee.salary%type; OPEN c1; LOOP FETCH c1 INTO emp_id, e_job, e_salary; EXIT WHEN c1%notfound; IF e_salary IS NULL THEN IF e_job = 'CEO' THEN e_salary := 5000; ELSIF e_job = 'MANAGER' THEN e_salary := 4500; ELSIF e_job = 'ENGINEER' THEN e_salary := 4300; ELSIF e_job = 'PROGRAMMER' THEN e_salary := 4100; ELSE e_salary := 4000; END IF; UPDATE employees SET salary = e_salary WHERE eno = emp_id; END IF; END LOOP; CLOSE c1; 80 Stored Procedures Manual

81 / isql> SELECT eno, emp_job FROM employees WHERE salary IS NULL; ENO EMP_JOB CEO 8 manager 20 sales rep 3 rows selected. isql> EXEC proc1; Execute success. isql> SELECT eno, emp_job, salary FROM employees WHERE eno=1 OR eno=8 OR eno=20; ENO EMP_JOB SALARY CEO manager sales rep rows selected. 예제 2 CREATE TABLE t1 (i1 VARCHAR(20), i2 NUMBER, i3 DATE); CREATE TABLE t2 (i1 VARCHAR(20), i2 NUMBER, i3 DATE); INSERT INTO t1 VALUES ('21-JUL-2001', 2, '01-JUL- 2000'); INSERT INTO t2 VALUES (NULL,NULL,'01-FEB-1990'); INSERT INTO t2 VALUES (NULL,NULL,'02-FEB-1990'); CREATE OR REPLACE FUNCTION func2 (p1 IN DATE, p2 IN CHAR(30)) RETURN NUMBER AS RETURN (TO_NUMBER(TO_CHAR(p1, 'dd')) + TO_NUMBER(p2)); / CREATE OR REPLACE FUNCTION func1 (p1 IN DATE, p2 IN DATE) RETURN DATE AS IF p1 >= p2 THEN RETURN add_months(p1, 3); ELSE RETURN add_months(p1, 4); END IF; / CREATE OR REPLACE PROCEDURE proc1 AS v1 VARCHAR(20); v2 NUMBER; 흐름제어 81

82 v3 DATE; SELECT i1, func2(to_date(i1), TO_CHAR(i3, 'yyyy')), i3 INTO v1,v2,v3 FROM t1 WHERE i2 = 2; INSERT INTO t2 VALUES (v1,v2,v3); IF v2 not in (2001, 2002, 2003) AND v1 = '21-JUL- 2001' THEN UPDATE t2 SET i1 = func1(v1, '17-JUL-2001'), i2 = nvl(i2, 10) WHERE i3 = '01-FEB-1990'; UPDATE t2 SET i1 = func1(v1, '27-JUL-2001'), i2 = nvl(i2, 10*2) WHERE i3 = '02-FEB-1990'; END IF; / isql> EXEC proc1; Execute success. isql> SELECT * FROM t2; T2.I1 T2.I2 T2.I JUL /07/01 00:00:00 21-OCT /02/01 00:00:00 21-NOV /02/02 00:00:00 3 rows selected. 예제 3 CREATE TABLE payroll( eno INTEGER, bonus NUMBER(10, 2)); CREATE OR REPLACE PROCEDURE proc1 AS DECLARe CURSOR c1 IS SELECT DISTINCT(eno), SUM(qty) FROM orders GROUP BY eno; emp_id orders.eno%type; sum_qty orders.qty%type; bonus NUMBER(10, 2); OPEN c1; IF c1%isopen THEN LOOP FETCH c1 INTO emp_id, sum_qty; EXIT WHEN c1%notfound; IF sum_qty > THEN bonus := 1000; ELSIF sum_qty > THEN bonus := 500; ELSE 82 Stored Procedures Manual

83 bonus := 200; END IF; INSERT INTO payroll VALUES(emp_id, bonus); END LOOP; END IF; / isql> EXEC proc1; Execute success. isql> SELECT DISTINCT(eno), SUM(qty) sum FROM orders GROUP BY eno; ENO SUM rows selected. isql> SELECT * FROM payroll; PAYROLL.ENO PAYROLL.BONUS rows selected. 흐름제어 83

84 CASE 구문 case_statement_1 ::= CASE WHEN condition THEN statement ELSE statement END CASE ; case_statement_2::= CASE case_variable WHEN when_value THEN statement ELSE statement END CASE ; 기능 특정변수의값에따라서처리경로를결정하는조건분기문이다. IF 문과동일한기능이지만 CASE 문을사용하면프로그램의가독성을높일수있다. CASE 문은위의다이어그램에서보여주듯이다음두가지가있다. case_statement_1: 조건식이참일때에특정한문장을수행하는방식 84 Stored Procedures Manual

Altibase Stored Procedure Manual

Altibase Stored Procedure Manual ALTIBASE HDB Application Development Stored Procedures Manual Release 5.5.1 (January 16, 2013) ----------------------------------------------------------- ALTIBASE Application Development Stored Procedures

More information

Altibase Stored Procedure Manual

Altibase Stored Procedure Manual ALTIBASE HDB Application Development C/C++ External Procedures Manual Release 6.3.1 (April 16, 2015) ----------------------------------------------------------- ALTIBASE Application Development C/C++ External

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

목차 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

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

목차 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

목차 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

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

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

Microsoft Word - 05_SUBPROGRAM.doc

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

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

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

강의 개요

강의 개요 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

@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

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - chap05-제어문.pptx int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); 1 학습목표 제어문인,, 분기문에 대해 알아본다. 인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다.

More information

슬라이드 1

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

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

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

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

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

More information

Microsoft Word - PLSQL.doc

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

More information

PowerPoint 프레젠테이션

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

More information

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

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

More information

문서 템플릿

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

More information

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

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

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

Altibase Installation Manual

Altibase Installation Manual ALTIBASE HDB Application Development Windows ODBC Driver Installer User s Guide Release 6.3.1 (April 17, 2015) ----------------------------------------------------------- ALTIBASE Application Development

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

6장. SQL

6장. SQL 학습목표 SQL이 무엇인지 개념을 설명 테이블을 생성, 변경, 제거할 할 수 있다. 수 있다. 데이터를 검색, 갱신, 삽입, 삭 제할 수 있다. 뷰, 시스템 카탈로그, 저장 프 로시저, 트리거에 대한 개념 을 설명할 수 있다. 2 목차 SECTION 01 SQL의 개요 11 SQL의 역사 12 SQL의 유형별 종류 SECTION 0 21 스키마 22 테이블

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

Altibase Starting User's Manual

Altibase Starting User's Manual ALTIBASE HDB Tools & Utilities Altibase Hadoop Connector User's Manual Release 6 (April 17, 2015) ----------------------------------------------------------- ALTIBASE Tools & Utilities Altibase Hadoop

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

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

Microsoft PowerPoint - CSharp-10-예외처리

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

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

Tcl의 문법

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

More information

쉽게

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

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

윈도우즈프로그래밍(1)

윈도우즈프로그래밍(1) 제어문 (2) For~Next 문 윈도우즈프로그래밍 (1) ( 신흥대학교컴퓨터정보계열 ) 2/17 Contents 학습목표 프로그램에서주어진특정문장을부분을일정횟수만큼반복해서실행하는문장으로 For~Next 문등의구조를이해하고활용할수있다. 내용 For~Next 문 다중 For 문 3/17 제어문 - FOR 문 반복문 : 프로그램에서주어진특정문장들을일정한횟수만큼반복해서실행하는문장

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

다양한 예제로 쉽게 배우는 오라클 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

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

ALTIBASE HDB Patch Notes

ALTIBASE HDB Patch Notes ALTIBASE HDB 5.3.3.93 Patch Notes Table of Contents BUG-27950 ALL PRIVILEGES 권한을가진계정이다른계정의테이블에 Foreign Key 를 생성하지못한다. 3 BUG-38105 PASSWORD_LIFE_TIME 경과후유예기간 (PASSWORD_GRACE_TIME) 내에 접속을시도할경우알림메시지를발생해야한다.

More information

17장 클래스와 메소드

17장 클래스와 메소드 17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는

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

쉽게 풀어쓴 C 프로그래밊

쉽게 풀어쓴 C 프로그래밊 Power Java 제 27 장데이터베이스 프로그래밍 이번장에서학습할내용 자바와데이터베이스 데이터베이스의기초 SQL JDBC 를이용한프로그래밍 변경가능한결과집합 자바를통하여데이터베이스를사용하는방법을학습합니다. 자바와데이터베이스 JDBC(Java Database Connectivity) 는자바 API 의하나로서데이터베이스에연결하여서데이터베이스안의데이터에대하여검색하고데이터를변경할수있게한다.

More information

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

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

More information

Microsoft PowerPoint - 10Àå.ppt

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

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

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 자바-기본문법(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

슬라이드 제목 없음

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

More information

OCW_C언어 기초

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

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

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

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

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

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

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

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

Microsoft PowerPoint 세션.ppt

Microsoft PowerPoint 세션.ppt 웹프로그래밍 () 2006 년봄학기 문양세강원대학교컴퓨터과학과 세션변수 (Session Variable) (1/2) 쇼핑몰장바구니 장바구니에서는사용자가페이지를이동하더라도장바구니의구매물품리스트의내용을유지하고있어야함 PHP 에서사용하는일반적인변수는스크립트의수행이끝나면모두없어지기때문에페이지이동시변수의값을유지할수없음 이러한문제점을해결하기위해서 PHP 에서는세션 (session)

More information

ESQL/C

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

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

<C1A62038B0AD20B0ADC0C7B3EBC6AE2E687770>

<C1A62038B0AD20B0ADC0C7B3EBC6AE2E687770> 제 8강 SQL: 관계데이터베이스언어 강의목표 관계데이타베이스언어로서상용 DBMS에서가장널리사용되는 SQL의동작원리에관하여학습하고, 이를이용하여다양한질의문을작성하는방법을습득한다 기대효과 SQL의데이터정의기능을이해한다 SQL의데이터조작기능중질의기능을이해한다 SQL의데이터조작기능중데이터갱신기능을이해한다 SQL의데이터조작기능중뷰및인덱스관련기능을이해한다 SQL 의개요

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

단답형 (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

슬라이드 1

슬라이드 1 9. 저장프로시저 동일한 Transact-SQL 문을수시로사용한다면저장프로시저로만들어사용해보자. 효율성과성능면에서월등한발전을경험할수있을것이다. 2 청춘 청춘이란인생의어느기간을말하는것이아니라마음의상태를말하는것이다. 그것은장밋빛얼굴, 앵두같은입술, 하늘거리는자태가아니고강인한의지, 풍부한상상력, 불타는정열을말한다. 청춘이란인생의깊은샘물에서나오는정신력을뜻하며청춘이란유약함을물리치는용기,

More information

4장.문장

4장.문장 문장 1 배정문 혼합문 제어문 조건문반복문분기문 표준입출력 입출력 형식화된출력 [2/33] ANSI C 언어와유사 문장의종류 [3/33] 값을변수에저장하는데사용 형태 : < 변수 > = < 식 > ; remainder = dividend % divisor; i = j = k = 0; x *= y; 형변환 광역화 (widening) 형변환 : 컴파일러에의해자동적으로변환

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field

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

TITLE

TITLE CSED421 Database Systems Lab MySQL Basic Syntax SQL DML & DDL Data Manipulation Language SELECT UPDATE DELETE INSERT INTO Data Definition Language CREATE DATABASE ALTER DATABASE CREATE TABLE ALTER TABLE

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

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

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures 단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct

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

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

歯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

다른 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

ALTIBASE HDB Patch Notes

ALTIBASE HDB Patch Notes ALTIBASE HDB 6.3.1.10.6 Patch Notes 목차 BUG-45060 offline replication start 와 replication drop 을동시에수행하는경우, replication start 가완료되지않았으면 replication drop 을수행하지못하도록수정하였습니다... 4 BUG-46193 메모리테이블의이중화병렬 sync

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

슬라이드 1

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

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

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - chap06-5 [호환 모드] 2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 MySQL - 명령어 1. 데이터베이스관련명령 2. 데이터베이스테이블관련명령 3. SQL 명령의일괄실행 4. 레코드관련명령 5. 데이터베이스백업및복원명령 1. 데이터베이스관련명령 데이터베이스접속명령 데이터베이스접속명령 mysql -u계정 -p비밀번호데이터베이스명 C: > mysql -ukdhong p1234 kdhong_db 데이터베이스생성명령 데이터베이스생성명령

More information

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET 135-080 679-4 13 02-3430-1200 1 2 11 2 12 2 2 8 21 Connection 8 22 UniSQLConnection 8 23 8 24 / / 9 3 UniSQL 11 31 OID 11 311 11 312 14 313 16 314 17 32 SET 19 321 20 322 23 323 24 33 GLO 26 331 GLO 26

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

PowerPoint 프레젠테이션

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

More information

Microsoft PowerPoint - 3장-MS SQL Server.ppt [호환 모드]

Microsoft PowerPoint - 3장-MS SQL Server.ppt [호환 모드] MS SQL Server 마이크로소프트사가윈도우운영체제를기반으로개발한관계 DBMS 모바일장치에서엔터프라이즈데이터시스템에이르는다양한플랫폼에서운영되는통합데이터관리및분석솔루션 2 MS SQL Server 개요 3.1 MS SQL Server 개요 클라이언트-서버모델을기반으로하는관계 DBMS로서윈도우계열의운영체제에서만동작함 오라클관계 DBMS보다가격이매우저렴한편이고,

More information

PowerPoint Template

PowerPoint Template JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것

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

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.

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

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

5장 SQL 언어 Part II

5장 SQL 언어 Part II 5 장 SQL 언어 Part II 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 5 장 SQL 언어 Part II 1 / 26 데이터조작문 데이터검색 : SELECT 문데이터추가 : INSERT 문데이터수정 : UPDATE 문데이터삭제 : DELETE 문 박창이 ( 서울시립대학교통계학과 ) 5 장 SQL 언어 Part II 2 / 26 SELECT

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.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 학습목표 중 값에 의한 전달 방법과

More information

Microsoft PowerPoint 웹 연동 기술.pptx

Microsoft PowerPoint 웹 연동 기술.pptx 웹프로그래밍및실습 ( g & Practice) 문양세강원대학교 IT 대학컴퓨터과학전공 URL 분석 (1/2) URL (Uniform Resource Locator) 프로토콜, 호스트, 포트, 경로, 비밀번호, User 등의정보를포함 예. http://kim:3759@www.hostname.com:80/doc/index.html URL 을속성별로분리하고자할경우

More information

슬라이드 1

슬라이드 1 Tadpole for DB 1. 도구개요 2. 설치및실행 4. 활용예제 1. 도구개요 도구명 소개 Tadpole for DB Tools (sites.google.com/site/tadpolefordb/) 웹기반의데이터베이스를관리하는도구 Database 스키마및데이터관리 라이선스 LGPL (Lesser General Public License) 특징 주요기능

More information

컴파일러

컴파일러 YACC 응용예 Desktop Calculator 7/23 Lex 입력 수식문법을위한 lex 입력 : calc.l %{ #include calc.tab.h" %} %% [0-9]+ return(number) [ \t] \n return(0) \+ return('+') \* return('*'). { printf("'%c': illegal character\n",

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

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