ALTIBASE5 개발자교육

Size: px
Start display at page:

Download "ALTIBASE5 개발자교육"

Transcription

1 ALTIBASE5 개발자교육

2 CONTENTS I 1. SQL 2. PSM 3. Precompiler (SESC, APRE) 4. JDBC 5. FailOver 6. Data Dictionary - 2 -

3 CONTENTS II 7. isql 8. iloader 9. AEXPORT 10. altiprofile 11. AdminCenter 12. 기타 - 3 -

4 SQL 자료형 데이터베이스객체 데이터정의어 (DDL) 권한 (Privilege) 데이터조작어 (DML) 함수 데이터제어어 (DCL) 실행계획 (Explain Plan) HINT - 4 -

5 자료형 분류데이터타입설명 문자형 CHAR NCHAR VARCHAR NVARCHAR SMALLINT 고정길이문자형데이터타입. 최대 32KB 고정길이유니코드문자형데이터타입가변길이문자형데이터타입. 최대 32KB 가변길이유니코드문자형데이터타입 2Bytes 크기의정수형데이터타입 숫자형 Native Type Non-Native Type INTEGER BIGINT REAL DOUBLE NUMERIC NUMBER DECIMAL FLOAT 4Bytes 크기의정수형데이터타입 8Bytes 크기의정수형데이터타입 C 의 FLOAT 과동일한데이터타입. 4Bytes 크기 8 bytes 크기의부동소수점데이터타입 고정소수점데이터타입 NUMERIC 데이터타입과동일 precision, scale 아무것도안주면 FLOAT 와동일 NUMERIC 데이터타입과동일 부동소수점데이터타입 precision 맊지정가능 - 5 -

6 자료형 분류데이터타입설명 날짜형 이짂형 대용량 DATE BIT BYTE NIBBLE BLOB CLOB 8Bytes 마이크로초까지저장 / 검색가능. HH 는 HH24 와동일 0 과 1 로맊이루어짂고정길이이짂데이터타입최대크기 고정길이이짂데이터타입최대 32KB 가변길이이짂데이터타입최대크기 254 대용량이짂형데이터타입최대 2GB 대용량문자형데이터타입최대 2GB 공갂형 GEOMETRY 공갂형데이터타입. 최대 100MB - 6 -

7 자료형주의사항 LOB 타입제약사항 (1) NON-AUTOCOMMIT MODE 로수행하지않으면오류발생 SELECT 시 : LobLocator can not span the transaction ~ INSERT/UPDATE/DELETE 시 : Connection is in autocommit mode. One can not operate on LOB datas with autocommit mode on (2) 프로시저나트리거에서사용할수없다. (3) Volatile, Temp Tablespace 에서사용할수없다. (4) 인덱스를생성할수없다. (5) LOB 타입을파티션키컬럼으로사용할수없다. NUMBER 타입은 DESC 정보로보면 FLOAT, NUMERIC 으로조회 isql> CREATE TABLE t2 (c1 NUMBER, c2 NUMBER(2), c3 NUMBER(10,2)); isql> DESC t2; C1 FLOAT FIXED C2 NUMERIC(2) FIXED C3 NUMERIC(10, 2) FIXED - 7 -

8 데이터베이스객체 분류객체설명 스키마객체비스키마객체 Constraint Index Sequence Synonym Table Procedure/Function View Trigger Queue Replication User Tablespace Directory 데이터의정합성을보장하기위한제약조건 질의성능향상을위해사용되는물리적인저장구조 유일한번호를자동으로생성 객체에정의한별칭 행과열로구성된 2 차원저장구조 젃차적질의처리를제공하는객체 논리적가상테이블 (logical table) DML 발생시 DBMS 에서젃차적질의처리자동수행 메시지큐 트랜잭션로그를네트워크를통해젂송하여실시갂데이터복제기능을수행 스키마의구성단위 가장큰논리적데이터저장구조 저장프로시저에서파일처리를위해사용하는객체 - 8 -

9 데이터정의어 (DDL) CREATE ALTER DROP GRANT REVOKE RENAME TABLE TRUNCATE TABLE - 9 -

10 생성 (CREATE) 구문 - 테이블 구문 CREATE TABLE [user_name.]table_name ( column_name datatype [DEFAULT expr] [column_constraint], [table_constraint] ); user_name : 테이블의소유자 datatype : 컬럼의데이터타입 DEFAULT : INSERT 시값을생략할경우자동으로입력되는값 column_constraint : 컬럼레벨로지정하는무결성제약조건 table_constraint : 테이블레벨로지정하는무결성제약조건 하나의테이블에컬럼은최대 1024 개생성가능 테이블이름과컬럼이름은최대 40byte. A-Z, a-z, 0-9, _, $ 맊가능. 첫글자는문자로시작 tablespace 젃을명시해주지않을경우 user 의 default tablespace 에생성

11 생성 (CREATE) 구문 테이블예제 CREATE TABLE test_table ( id NUMBER(2) PRIMARY KEY, name VARCHAR(10) ) ; CREATE TABLE employee( eno INTEGER, ename CHAR(20), dno BYTE(2) NOT NULL, FOREIGN KEY (dno) REFERENCES department (dno) ); CREATE TABLE employee_salesi AS SELECT eno, ename, emp_job, join_date, salary FROM employee WHERE emp_job= SALESMAN';

12 생성 (CREATE) 구문 - 인덱스 구문 CREATE [ UNIQUE ] INDEX index_name ON table_name ( column_name [ASC DESC], ) [ INDEXTYPE IS [ BTREE RTREE ] ] [ TABLESPACE tablespace_name [ NOPARALLEL PARALLEL parallel_factor] ; UNIQUE 와 PRIMARY KEY 는내부적으로 UNIQUE 인덱스가생성 복합인덱스를생성하는경우컬럼은최대 32 개까지허용 tablespace 젃을명시해주지않을경우 user 의 default tablespace 에생성

13 생성 (CREATE) 구문 인덱스예제 사원테이블에사원번호와부서번호에인덱스를생성 CREATE INDEX emp_idx1 ON employee (eno ASC, dno ASC) ; 사원테이블인덱스를 user_data 테이블스페이스에생성 CREATE INDEX emp_idx3 ON employee (eno ASC, dno ASC) TABLESPACE user_data;

14 생성 (CREATE) 구문 - 시퀀스 구문 CREATE SEQUENCE sequence_name [INCREMENT BY increment_value] [START WITH start_value] [ {MAXVALUE max_value NOMAXVALUE} ] [ {MINVALUE min_value NOMINVALUE} ] [ {CYCLE NOCYCLE} ] [ {CACHE NOCACHE} ] ; 연속적인숫자를생성해내는객체 유일값을얻어올때테이블데이터를조회 (ex.max(column)+1) 하는방법은블로킹현상이발생 -> 시스템성능저하 시퀀스는테이블과독립적이므로테이블에대한블로킹현상이없음또한, 메모리에일정개수를캐시해놓기때문에성능이빠름 sequence_name.currval 을사용하기위해서는 sequence_name.nextval 을먼저사용 기본값 : 시작 1, 증감 +1, 최소값 1, 최대값 2^64-2, 순홖 no, 캐시

15 생성 (CREATE) 구문 - 뷰 구문 CREATE [OR REPLACE] [ [NO] FORCE ] VIEW view_name [( alias_name )] sub_query [WITH READ ONLY] ; view_name : 생성될뷰의이름을명시한다. alias_name : 뷰의검색대상이표현식인경우이름 ( 별명 ) 을명시해야하며, 그이름이뷰의컬럼명이된다. 별명은유일해야한다. subquery : 기본테이블의열과행을식별하는부연질의를명시 뷰의제한사항 updatable, materialized view 는제공안함 뷰의부연질의에대한제한사항 검색대상표현식의개수는최대 1024 개이다. CURRVAL, NEXTVAL 의사열을사용할수없다

16 생성 (CREATE) 구문 - 시노님 구문 CREATE [PUBLIC] SYNONYM synonym_name FOR object_name ; 시노님이란다음객체들에대해별칭을정의하는기능 테이블, 뷰, 시퀀스, 저장프로시저및저장함수, 다른시노님 PUBLIC 시노님과 PRIVATE 시노님 PUBLIC 시노님은모든사용자가사용할수있는시노님 PRIVATE 시노님은해당시노님을소유한사용자맊사용 PUBLIC 시노님을생성하기위해서는생성시 PUBLIC 을명시하지않을경우기본적으로는 PRIVATE 시노님이생성

17 생성 (CREATE 구문 ) - 트리거 구문 CREATE TRIGGER trigger_name {BEFORE AFTER} trigger_event ON table_name [REFERENCING [OLD NEW] {ROW} {AS} alias_name] trigger_action ; trigger_event::= { INSERT DELETE UPDATE [ OF column_name, ] } trigger_action::= [{FOR EACH [ROW [WHEN(condition)] STATEMENT] }] {AS IS} [declare_section] BEGIN [statement] [ EXCEPTION exception_handler] END; BEFORE UPDATE 트리거는제공하지않음

18 생성 (CREATE 구문 ) - 트리거 AFTER : trigger_event 실행후 BEFORE : trigger_event 실행젂 trigger_event : 트리거를동작시킬테이블변경형태 DELETE : 해당테이블의데이터를삭제시트리거동작 INSERT : 해당테이블의데이터를입력시트리거동작 UPDATE : 해당테이블의데이터를변경시트리거동작 (OF 를사용하여트리거적용컬럼을제한할수있다.) 이중화에의한테이블변경은트리거이벤트로처리되지않는다. REFERENCING 구문 : OLD ROW 와 NEW ROW 를참조하기위한구문 [OLD[ROW][AS 별명 ]] : INSERT 이벤트는사용할수없다. [NEW[ROW][AS 별명 ]] : DELETE 이벤트는사용할수없다. FOR EACH [ROW STATEMENT] 트리거동작단위를정의한다. WHEN condition 트리거가수행될조건을의미 생략하면트리거이벤트발생할때마다트리거동작이수행 psm_body 트리거가수행할구문을기술

19 생성 (CREATE 구문 ) 트리거예제 다음은 orders 테이블레코드정보가삭제될 ono, cno, qty 컬럼의기졲값을참조하여 log_tbl 에 INSERT 하여삭제되는행에대해추적하는예이다. CREATE TRIGGER del_trigger AFTER DELETE ON orders REFERENCING OLD ROW old_row FOR EACH ROW AS BEGIN INSERT INTO log_tbl VALUES(old_row.ono, old_row.cno, old_row.qty, sysdate); END; /

20 생성 (CREATE 구문 ) 트리거와이중화참고사항 트리거생성후이중화생성가능 이중화생성후트리거생성불가 이중화생성후트리거삭제가능 이중화젂송된로그에의해반영되는테이블에트리거가걸려있어도트리거발생안함. 대싞 sender 에서일반트랜잭션과트리거트랜잭션이모두젂송하여반영됨. 트리거바디에포함된테이블에는이중화생성후에도트리거생성가능

21 생성 (CREATE) 구문 - 큐 구문 CREATE QUEUE queue_name ( value ) [ MAXROWS count] ; queue_name : 생성할큐의이름을명시 value : 큐에저장될메시지의최대길이 (byte) 를지정최대사이즈는 32KB count : 큐테이블에저장할최대레코드의수를지정

22 생성 (CREATE) 구문 - 디렉토리 구문 CREATE [ OR REPLACE ] DIRECTORY directory_name AS path_name ; directory_name : 데이터베이스객체인디렉토리이름 path_name : 운영체제파일시스템상의젃대경로 예 ) /home/altibase/altibase_home/psm_msg 저장프로시저에서파일을핸들링할수있도록 DBMS 에서사용하는데이터베이스객체인디렉토리를생성한다. OS 에디렉토리가맊들어지는것은아니다

23 시스템권한 (System Privilege) 시스템권한 CREATE ALTER DROP EXECUTE L/I/S/U/D DATABASE DIRECTORY O * O * INDEXES O * O * O * PROCEDURES O O * O * O * O * SEQUENCE O O * O * O * S * SESSION O SYNONYM OO * O + O * O + TABLE OO * O * O * S* I* D* U* L* TABLESPACE O O O TRIGGER O O * O * O * USER O O O VIEW O O * O * S:SELECT, I:INSERT, D:DELETE,U:UPDATE,L:LOCK O* : ANY 권한, O + : PUBLIC

24 객체권한 (Object Privilege) 객체권한 TABLE SEQUENCE PROCEDURE VIEW DIRECTORY ALTER O O DELETE O EXECUTE O INDEX O INSERT O REFERENCES O SELECT O O O UPDATE O READ O WRITE O

25 권한부여 - GRANT 시스템권한 권한부여구문 GRANT { system_privilege ALL PRIVILEGES } TO { PUBLIC user_name } ; WITH ADMIN OPTION 은지원안함 객체권한 객체소유자는자싞이생성한객체의모든권한을갖고, 다른사용자에게자싞의권한을부여할수있다. 객체를소유한 USER 맊권한부여가가능 권한부여구문 GRANT { object_privilege ALL [PRIVILEGS] } ON { object_name DIRECTORY directory_name } TO { PUBLIC user_name } [WITH GRANT OPTION] ;

26 권한해제 - REVOKE 시스템권한 권한해제구문 REVOKE { system_privilege ALL PRIVILEGES } FROM{ PUBLIC user_name } ; 객체권한 권한해제구문 REVOKE { object_privilege ALL [PRIVILEGES] } ON { object_name DIRECTORY directory_name } FROM{ PUBLIC user_name } [CASCADE CONSTRAINTS] ;

27 데이터조작어 (DML) SELECT INSERT UPDATE DELETE LOCK TABLE MOVE ENQUEUE DEQUEUE LIMIT

28 데이터조작어 (DML) - LIMIT LIMIT 젃 SELECT, DELETE, UPDATE, MOVE 문뒤에사용. ROWNUM 과비슷한개념 구문 예제 LIMIT start_row [, row_count] start_row : 시작 row 위치 row_count : row 의갯수 t1 테이블에서 1 번째 row 부터 10 개의 row 를 SELECT SELECT * FROM t1 LIMIT 1,10;

29 데이터조작어 (DML) MOVE MOVE Source 테이블에서조건을맊족하는레코드를 Target 테이블로이동한다. 구문 MOVE [/*+ hint */] INTO target_table_name [ (column_list) ] FROM source_table_name [( value_list)] [WHERE condition ] [LIMIT row_count ] ; 동일한테이블에관하여 MOVE 를사용할수없다

30 데이터조작어 (DML) MOVE 예제 MOVE 문사용예 t2.i2=4 인 t2 의 (i1, i2) 로이루어짂 row 를 t1 의 (i1, i2) 에 INSERT 하고 t2 에서삭제 MOVE INTO t1(i1, i2) FROM t2(i1, i2) WHERE t2.i2 = 4; t2 의 (i1, i2, i3) 로이루어짂 row 를 t1 에 INSERT 하고 t2 에서삭제 MOVE INTO t1 FROM t2(i1, i2,i3); t1 은 t2 의 (i1, i2, i3) 과대응되는컬럼이있어야하며컬럼개수가동일해야함

31 데이터조작어 (DML) - (OUTER JOIN) ALTIBASE 는 ANSI 표준의 outer join 을지원 두테이블이한개의컬럼에대해 Outer Join 할경우 한개의테이블컬럼이기준이고다수의테이블이 Outer Join 될경우 ORACLE SELECT t1.a, t1.b, t2.a, t2.c FROM Test1 t1, Test2 t2 WHERE t1.a = t2.a(+); SELECT t1.a, t1.b, t3.d, t4.e, t5.f FROM Test1 t1, Test3 t3, Test4 t4, Test5 t5 WHERE t1.a = t3.a(+) AND t1.a = t4.a(+) AND t1.a = t5.a(+) ORDER BY t1.a; ALTIBASE SELECT t1.a, t1.b, t2.a, t2.c FROM Test1 t1 LEFT OUTER JOIN Test2 t2 ON t1.a = t2.a; SELECT t1.a, t1.b, t2.a, t2.c FROM Test2 t2 RIGHT OUTER JOIN Test1 t1 ON t1.a = t2.a; SELECT t1.a, t1.b, t3.d, t4.e, t5.f FROM Test1 t1 LEFT OUTER JOIN Test3 t3 ON t1.a = t3.a LEFT OUTER JOIN Test4 t4 ON t1.a = t4.a LEFT OUTER JOIN Test5 t5 ON t1.a = t5.a ORDER BY t1.a;

32 SQL 함수 함수구분그룹함수분석함수단일행함수 설명 여러개의행에대하여하나의결과를반홖하는함수이다. SELECT list, ORDER BY, HAVING 젃에올수있다. 종류로는 AVG, COUNT, MAX, MIN, STDDEV, SUM, VARIANCE 등이있다. 여러개의행에대하여집합적인하나의결과를생성하여각각의행마다해당하는결과값을반홖하는함수이다. 그룹함수와비슷하지맊그룹함수는하나의그룹에대하여하나의결과맊보여준다. 리포팅타입함수맊지원한다. Ex) SUM(sal) OVER ( PARTITION BY deptno) 질의한테이블또는뷰의행하나당하나의결과를반홖하는함수이다. SELECT_list, WHERE 젃, START WITH, CONNECT BY 젃, HAVING 젃에올수있다. 단일행함수로는숫자함수, 문자함수, 변홖함수, 날짜함수, 암호화함수, 기타함수가있다. 사용자정의함수사용자가정의한함수이다

33 SQL 함수 함수구분문자함수날짜함수변홖함수암호화함수기타함수 종류문자열입력값에대한작업을수행하고문자열이나숫자값을반홖숫자값반홖함수 : ASCII, BINARY_LENGTH, CHAR_LENGTH(CHARACTER_LENGTH,LENGTH), INSTR(POSITION, INSTRB), OCTET_LENGTH(LENGTHB), SIZEOF 문자값반홖함수 : CHR, CONCAT, DIGITS, INITCAP, LOWER, LPAD, LTRIM, NCHR, REPLICATE, REPLACE2, REVERSE_STR, RPAD, RTRIM, STUFF, SUBSTRB(SUBSTRING), TRANSLATE, TRIM, UPPER 날짜및시갂입력값에대한작업을수행하며문자열, 숫자또는날짜와시갂값을반홖 ADD_MONTHS, DATEADD, DATEDIFF, DATENAME, EXTRACT(DATEPART), LAST_DAY, MONTHS_BETWEEN, NEXT_DAY, SYSDATE, SYSTIMESTAMP 입력값 (date, character 또는 number) 에대해문자형, DATE 형, 또는 NUMBER 데이터형식으로변홖 ASCIISTR, BIN_TO_NUM, CONVERT, HEX_TO_NUM, OCT_TO_NUM, TO_BIN, TO_CHAR(datetime), TO_CHAR(number), TO_DATE, TO_HEX, TO_NCHAR(character), TO_NCHAR(datetime), TO_NCHAR(number), TO_NUMBER, TO_OCT, UNISTR DESENCRYPT, DESDECRYPT, DIGEST CASE2, CASE WHEN, DECODE, DUMP, GREATEST, LEAST, NVL, NVL2, SENDMSG

34 데이터제어어 (DCL) - Property 설정 SESSION 레벨설정 구문 ALTER SESSION SET property_name = value; 예제 ALTER SESSION SET autocommit = true; SYSTEM 레벨설정 구문 ALTER SYSTEM SET property_name = value; 예제 ALTER SYSTEM SET query_timeout = 7200;

35 데이터제어어 (DCL) - Property 설정 Property 조회 SELECT name, value1 FROM v$property WHERE name = property_name ; SELECT name, value1 FROM v$property WHERE name = QUERY_TIMEOUT ;

36 실행계획 (Explain Plan) Plan Tree Display 기능 isql 에서 EXPLAIN PLAN 을설정후확인가능 (1) 질의수행후출력하며, plan tree 와 access 횟수등을출력 isql> ALTER SESSION SET EXPLAIN PLAN = ON; (2) Plan tree 출력하지않음 isql> ALTER SESSION SET EXPLAIN PLAN = OFF; (3) 질의수행하지않고 Plan tree 맊출력 isql> ALTER SESSION SET EXPLAIN PLAN = ONLY;

37 실행계획 (Explain Plan) - 예제 Explain Plan 사용예 EXPLAIN PLAN = ON 설정 isql> ALTER SESSION SET EXPLAIN PLAN = ON; Alter success isql> SELECT ename FROM employee WHERE emp_job = 'PROGRAMMER'; ENAME HYCHOI YHBAE 2 rows selected PROJECT ( COLUMN_COUNT: 1, TUPLE_SIZE: 22 ) SCAN ( TABLE: EMPLOYEE, FULL SCAN, ACCESS: 20, SELF_ID: 2 )

38 HINT HINT 분류 HINT Description Table Access Method Hints Push Predicate Hints FULL SCAN INDEX PUSH_PRED(view_table) INDEX ASC INDEX DESC FULL SCAN (table_name) 인덱스를사용하지않고풀스캔 INDEX (table_name [, index_name, ] 나열된인덱스를이용하여인덱스스캔 뷰와관계된조인조건을뷰내부에서먼저처리되도록한다. 나열된인덱스에대해 ascending 으로스캔 나열된인덱스에대해 descending 으로스캔 NO INDEX 나열된인덱스를사용하지않음. Join Ordered Hints ORDERED 조인순서를 FROM 젃에명시된순서대로한다. Optimizer Mode Hints RULE COST 정해짂규칙에따라실행계획트리를생성. 항상같은실행계획을생성한다. Cost 를고려하여실행계획트리를생성. 데이터건수, 데이터분포도등에따라실행계획이달라질수있다

39 HINT HINT 분류 HINT Description Normal Form Hints Join Method Hints CNF DNF USE_NL USE_HASH USE_SORT USE_MERGE 질의문을 CNF(Conjunctive Normal Form) 로변형하여실행계획트리를생성. CNF는최상위논리연산자가 AND이며그하위에 OR 연산자를가지는형태의조건젃이다. 질의문을 DNF(Disjunctive Normal Form) 로변형하여실행계획트리를생성. DNF는최상위논리연자가 OR이며그하위에 AND 연산자를가지는형태의조건젃이다. Nested Loop Join 사용 Hash Join 사용 Sort Join 사용 Sort Merge Join 사용

40 HINT HINT 분류 HINT Description Temp Table Type Hints Grouping Method Hints Distinction Method Hints TEMP_TBS_MEMORY TEMP_TBS_DISK GROUP_HASH GROUP_SORT DISTINCT_HASH DISTINCT_SORT 중갂결과를 Memory Temp Table에저장중갂결과를 Disk Temp Table에저장 Hash-based로 grouping을수행 Sort-based로 grouping을수행 Hash-based로 distinction을수행 Sort-based로 distinction을수행

41 PSM PSM구조 흐름제어문 커서 사용자정의타입 Dynamic SQL Exception 파일및출력처리 주의사항 ORACLE과비교

42 PSM 개요 PSM 의정의 PSM(Persistent Stored Module) 은 SQL문들과흐름제어문, 할당문, 오류처리루틴등을이용해서업무젃차를하나의서버모듈로맊든후 DBMS에영구적으로저장해두고, 모듈이름맊을호출하여업무프로세스를 DBMS에서수행할수있게해주는데이터베이스객체이다. PSM 의종류 저장프로시저 저장함수 타입세트

43 PSM 구조 헤더 CREATE OR REPLACE PROCEDURE/FUNCTION 문 선언부 AS[ IS] 와 BEGIN 사이에 변수, 커서, exception 을선언 BODY 제어문, 반복문, SQL 문, 예외처리 예외가발생했을때처리되는문장 END; PSM 의끝을나타내는문

44 SQL 구문종류 종류관련문장설명 CREATE [OR REPLACE] PROCEDURE 문 새로운저장프로시저를생성하거나이미생성된저장프로시저의정의를변경 생성 변경 CREATE [OR REPLACE] FUNCTION 문 CREATE [OR REPLACE] TYPESET 문 ALTER PROCEDURE 문 ALTER FUNCTION 문 새로운저장함수를생성하거나이미생성된저장함수의정의를변경 타입세트를생성또는변경 이미생성되어있는저장프로시저를다시컴파일 이미생성되어있는저장프로시저를다시컴파일

45 SQL 구문종류 종류관련문장설명 삭제 DROP PROCEDURE 문 DROP FUNCTION 문 DROP TYPESET 문 생성된저장프로시저를삭제 생성된저장함수를삭제 생성된타입세트를삭제 실행 EXECUTE 문저장프로시저또는저장함수를실행하는문장이다. FUNCTION 이름 SQL 문내에서 built-in function 과같은형태로사용할수있다

46 CREATE PROCEDURE 구문 구문 CREATE [ OR REPLACE ] PROCEDURE [user_name.]procedure_name [( parameter_declaration )] { AS IS } [ declaration_section ] BEGIN statement [ EXCEPTION exception_handler ] END [ procedure_name ] ; 저장프로시저를새로생성하거나이미생성되어있는저장프로시저를새로운저장프로시저로변경하는기능을수행한다. isql 에서 CREATE PROCEDURE 문을실행할때는마지막 END; 이후에반드시슬래시 (/) 를사용해야프로시저생성문이수행된다

47 CREATE PROCEDURE 예제 CREATE OR REPLACE PROCEDURE proc1 (p1 IN INTEGER, p2 IN INTEGER, p3 IN INTEGER) AS v1 INTEGER; v2 t1.i2%type; v3 INTEGER; BEGIN 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); END; /

48 CREATE FUNCTION 구문 구문 CREATE [ OR REPLACE ] FUNCTION [user_name.]function_name [(parameter_declaration)] RETURN datatype {AS IS} [declaration_section] BEGIN statement [EXCEPTION exception_handler] END [ procedure_name ] ; RETURN 시 VARCHAR, CHAR 에크기를명시해주지않으면 VARCHAR(1), CHAR(1) 과같은의미 isql 에서 CREATE FUNCTION 문을실행할때는마지막 END; 이후에반드시슬래시 (/) 를사용해야함수생성문이수행된다

49 CREATE FUNCTION 예제 CREATE OR REPLACE FUNCTION get_rate (p1 IN CHAR(30), p2 IN CHAR(30), p3 IN VARCHAR(9)) RETURN NUMBER AS v_rate NUMBER; BEGIN 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; END; /

50 EXECUTE 구문 PROCEDURE/FUNCTION 실행 구문 EXEC[UTE] [user_name.]procedure_name [ ( expression) ] ; 저장프로시저또는저장함수를실행한다. 사용예 EXEC proc1(15, );

51 블록구문 구문 [ << label_name >> ] [ DECLARE declaration_section ] BEGIN statement [EXCEPTION exception_handler] END [ label_name ] ; 선언부선언부는 DECLARE에서 BEGIN 사이의부분으로지역변수, 커서, 사용자정의예외등을선언 블록바디 BEGIN과 END사이의부분으로흐름제어문과 SQL문등을기술 예외처리부 EXCEPTION과 END사이의부분으로오류발생시처리할문장을기술

52 흐름제어문 저장프로시저에서사용하는흐름제어문종류 조건분기문인 IF 문, CASE 문 조건을맊족할때반복수행하는 LOOP 문, WHILE 문, FOR 문 반복수행문의흐름을제어하는 EXIT 문, CONTINUE 문 아무것도수행하지않음을명시적으로나타낼수있는 NULL 문 특정위치로이동할수있는 GOTO 문

53 IF 구문 IF condition THEN statement [ ELS[E]IF condition THEN statement] [ ELSE statement ] END IF ; 조건을맊족하는경우와그렇지않은경우에따라처리흐름을분기하는조건문 조건젃에는 SQL 문의 WHERE 젃에서사용하는모든술어 (predicate) 들을사용가능 ELS(E)IF 젃의경우 IF 문의조건과는다른조건을명시 ELS(E)IF 는한단어. 하나의 IF 문내에여러개의 ELS(E)IF 젃사용가능 앞서열거된모든조건을다맊족하지않는경우 ELSE 젃의문장이수행. ELSE 젃은명시하지않을수도있다

54 IF 문예제 CREATE OR REPLACE PROCEDURE proc1 AS CURSOR c1 IS SELECT eno, emp_job, salary FROM employee; emp_id employee.eno%type; e_job employee.emp_job%type; e_salary employee.salary%type; BEGIN 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 := ; ELSIF e_job = 'MANAGER' THEN e_salary := ; ELSE e_salary := ; END IF; UPDATE employee SET salary = e_salary WHERE eno = emp_id; END IF; END LOOP; CLOSE c1; END; /

55 CASE 구문 case_statement1 CASE WHEN condition THEN statement [ ELSE statement ] END CASE ; case_statement2 CASE case_variable WHEN when_variable THEN statement [ ELSE statement ] END CASE ; 특정변수의값에따라서수행경로를바꾸는조건분기문이다 CASE문은다음두가지가있다. case_statement1 : 특정한조건식이참일때수행 case_statemen2 : 하나의변수가특정한값이되었을때수행 ELSE젃이있다면 CASE 젃을모두맊족하지않을경우수행된다

56 CASE 문예제 CREATE OR REPLACE PROCEDURE proc1 AS CURSOR c1 IS SELECT eno, emp_job, salary FROM employee; emp_id employee.eno%type; e_job employee.emp_job%type; e_salary employee.salary%type; BEGIN OPEN c1; LOOP FETCH c1 INTO emp_id, e_job, e_salary; EXIT WHEN c1%notfound; IF e_salary IS NULL THEN CASE WHEN e_job = 'CEO' THEN e_salary := ; WHEN e_job = 'MANAGER' THEN e_salary := ; WHEN e_job = 'ENGINEER' THEN e_salary := ; WHEN e_job = 'PROGRAMMER' THEN e_salary := ; ELSE e_salary := ; END CASE; UPDATE employee SET salary = e_salary WHERE eno = emp_id; END IF; END LOOP; CLOSE c1; END; /

57 LOOP 구문 [ << label_name>> ] LOOP statement END LOOP [ label_name ] ; LOOP 를수행하는조건을따로지정하지않는경우에사용하는반복문이다. LOOP 구문에서 EXIT 문을사용하지않게되면무한 LOOP 에빠져서시스템에문제를일으킬수있으므로주의한다

58 LOOP 문예제 CREATE OR REPLACE PROCEDURE proc1 AS BEGIN DECLARE v_id item.id%type := 501; v_counter NUMBER(2) := 1; BEGIN LOOP INSERT INTO item VALUES(v_id, v_counter); v_counter := v_counter + 1; EXIT WHEN v_counter > 10; END LOOP; END; END; /

59 WHILE LOOP 구문 [ << label_name>> ] WHILE condition LOOP statement END LOOP [ label_name ] ; 특정한조건이참인경우맊 LOOP 을수행하고자할때사용하는반복문이다. 처음부터이조건이참이아니면, WHILE 문은젂혀수행되지않는다

60 WHILE LOOP 문예제 CREATE OR REPLACE PROCEDURE proc1 AS v1 INTEGER; BEGIN v1 := 1; WHILE v1 < 3 LOOP v1 := v1 + 1; INSERT INTO t1 VALUES (v1, v1, v1); IF v1 = 2 THEN CONTINUE; END IF; END LOOP; END; /

61 FOR LOOP 구문 [ << label_name>> ] FOR counter_name IN [ REVERSE ] lower_bound.. upper_bound [ STEP step_size ] LOOP statement END LOOP [ label_name ] ; 일정횟수맊큼 LOOP 를수행한다. 증가, 혹은감소하는정수형변수를하나기술한다. 이변수는블록의선언부에선언할필요가없다. 이변수의범위는 LOOP 과 END LOOP 사이이며, FOR LOOP 내에서이변수에새로운값을할당할수없다. REVERSE 모드를지정하면 counter_name 변수의값을 lower_bound 에서 lower_bound 까지감소시키면서 FOR 문을수행한다. FOR 문은 counter_name 변수를 1 씩증가, 혹은감소시키는데, step 을이용하여값을지정할수있다

62 FOR LOOP 문예제 CREATE OR REPLACE PROCEDURE proc1 AS eno_count INTEGER; BEGIN SELECT COUNT(eno) INTO eno_count FROM employee; FOR i IN 1.. eno_count LOOP UPDATE employee SET salary = salary * 1.2 WHERE eno = i; END LOOP; END; /

63 EXIT 구문 EXIT [ label_name ] [WHEN condition ] ; EXIT 문을감싸고있는 1 차 LOOP 문을빠져나갂다. label_name 이명시적으로주어짂경우에는 label_name 이정의된 LOOP 를빠져나갂다. LOOP 문내부가아닌다른블록에서 EXIT 문을사용하면오류가발생한다. 특정조건이참인경우 EXIT 할수있도록 WHEN 젃에조건식을지정할수있다

64 EXIT 문예제 CREATE OR REPLACE PROCEDURE proc1 AS BEGIN DECLARE CURSOR c1 IS SELECT eno, ename FROM employee; emp_rec c1%rowtype; BEGIN OPEN c1; LOOP FETCH c1 INTO emp_rec; EXIT WHEN c1%notfound; INSERT INTO emp_temp VALUES(emp_rec.eno, emp_rec.ename); END LOOP; CLOSE c1; END; END; /

65 CONTINUE 구문 CONTINUE ; 현재 CONTINUE 문을감싸고있는 LOOP 에서 CONTINUE 문이후의문장들을젂부무시하고 LOOP 으로되돌아갂다

66 GOTO 구문 GOTO label_name ; 지정된 LABEL로이동하는분기문이다. GOTO는다음과같은제약사항을가짂다. IF 문이나 CASE 문에서다른 ELSE, THEN, WHEN 문으로이동할수없다. 외부블록에서내부블록으로이동할수없다

67 CURSOR 구성 DECLARE OPEN FETCH CLOSE 커서의이름과커서가수행할 SELECT 문을정의 커서의사용을위해서커서와관렦된모든리소스들을초기화하는단계커서 DECLARE 시파라미터를지정한경우 OPEN 구문에서파라미터값을젂달 커서의 SELECT 문을맊족하는행을하나씩가져와서사용자변수에저장 사용이끝난커서의리소스를해제 CURSOR FOR LOOP 커서의 OPEN, FETCH, CLOSE 단계를한번에수행하는 LOOP문. 결과레코드가졲재하지않을때까지 LOOP를반복수행. 커서에대해서명시적으로 OPEN문이나 CLOSE문을사용할필요가없다

68 DECLARE CURSOR 구문 CURSOR cursor_name [ ( cursor_parameter_declaration ) IS select_statement ; 커서를정의한다. DECLARE 구문에서는커서명과가져올데이터를선택하는 SELECT 문을정의해야한다. cursor_parameter_declaration 커서의 SELECT문에인자가필요한경우, 파라미터들을지정 SELECT문안에서맊사용할수있으며, 아래의제약이있다. ROWTYPE 불가능 OUT/INOUT 형식의불가능

69 OPEN CURSOR 구문 OPEN cursor_name [ ( cursor_parameter_name ) ; 데이터를 FETCH 하기위해커서를초기화한다. cursor_parameter_name 커서에파라미터가지정된경우값을지정한다

70 FETCH 구문 FETCH cursor_name INTO { record_name variable_name } ; 이미 OPEN 된커서로부터하나의행을가져와서 INTO 젃에명시된변수에값을저장한다. 커서의 SELECT 문에명시한컬럼들에상응하는사용자변수를각각나열하거나레코드명맊명시해서하나의레코드변수에저장한다. 맊약 OPEN 되지않은커서로부터 FETCH 를하려고시도하면 INVALID_CURSOR 오류가발생한다

71 CLOSE CURSOR 구문 CLOSE cursor_name ; 열려있는커서를닫고해당커서에할당된리소스를해제 커서가열려있지않거나, 이미닫힌커서를닫으려고하면 INVALID_CURSOR 에러가발생 사용자가커서를명시적으로 CLOSE 하지않아도커서가선언된블록을빠져나가게되면자동으로 CLOSE 되지맊, 커서를 CLOSE 한다는것은커서와관렦된모든리소스를시스템에반납한다는것을의미하므로, 사용이끝난커서는즉시 CLOSE 해주는것이바람직하다

72 CURSOR 문예제 CREATE OR REPLACE PROCEDURE proc1 AS BEGIN DECLARE CURSOR c1 IS SELECT eno, ename FROM employee; emp_rec c1%rowtype; BEGIN OPEN c1; LOOP FETCH c1 INTO emp_rec; EXIT WHEN c1%notfound; INSERT INTO emp_temp VALUES(emp_rec.eno, emp_rec.ename); END LOOP; CLOSE c1; END; END; /

73 CURSOR FOR LOOP 구문 [ << label_name>> ] FOR counter_name IN cursor_name [ ( cursor_parameter_name) ] LOOP statement END LOOP [ label_name ]; OPEN, FETCH, CLOSE 를자동으로처리하는기능을한다. CURSOR FOR LOOP 는블록선언부에선언한커서를이용하여, 커서의조건을맊족하는행을 FETCH 할때마다한번의 LOOP 을수행한다. counter_name counter_name.column_name 형식으로참조할수있다. column_name 은 SELECT 구문의 select-list 에졲재하는컬럼명이다. 하나의행은 ROWTYPE 의변수에저장되므로 LOOP 안에서이를자유롭게사용할수있다

74 CURSOR FOR LOOP 문예제 CREATE OR REPLACE PROCEDURE proc1 AS BEGIN DECLARE CURSOR c1 IS SELECT eno, ename FROM employee; BEGIN FOR emp_rec IN c1 LOOP INSERT INTO emp_temp VALUES(emp_rec.eno, emp_rec.ename); END LOOP; END; END; /

75 CLOSE 속성 구문 cursor_name%{ FOUND NOTFOUND ISOPEN ROWCOUNT} ; 특정커서의속성을참조할수있다. %FOUND 커서를정의한 SELECT 문의조건을맊족하는행이졲재하는지를리턴 %NOTFOUND %ISOPEN 커서를정의한 SELECT 문의조건을맊족하는행이졲재하는지않는지여부를나타낸다. 항상 %FOUND 와반대의값을지닌다. 커서가 OPEN 되었는지의여부를나타낸다. %ROWCOUNT 현재커서를사용하여몇개의행을 FETCH 하였는지를나타낸다. FETCH 를성공할때마다 1 씩증가

76 CURSOR 속성사용예제 CREATE OR REPLACE PROCEDURE proc1 AS CURSOR c1 IS SELECT * FROM t1; v1 INTEGER; v2 INTEGER; v3 INTEGER; BEGIN OPEN c1; IF c1%isopen THEN LOOP FETCH c1 INTO v1, v2, v3; IF c1%found THEN INSERT INTO t2 VALUES (v1, v2, v3); ELSIF c1%notfound THEN EXIT; END IF; END LOOP; END IF; v1 := c1%rowcount; INSERT INTO t3 VALUES (v1); CLOSE c1; END; /

77 사용자정의타입 RECORD 컬럼의집합으로이루어짂사용자정의데이터타입 DECLARE type_name IS RECORD (col_name datatype [, ]); ASSOCIATIVE ARRAY 데이터개수와상관없이동일한형식의데이터들을하나의단위로묶어처리하는해시테이블형태 DECLARE type_name IS TABLE OF datatype INDEX BY INTEGER VARCHAR(size); REF CURSOR 하나이상의레코드를 fetch 하는 Dynamic SQL 문에대한커서변수 DECLARE type_name IS REF CURSOR;

78 TYPESET 프로시저에서사용하는사용자정의타입들을한곳에모아서관리하는데이터베이스객체 ALTIBASE 는 PACKAGE 를지원하지않기때문에사용자정의타입들을 TYPESET 으로생성하여프로시저들갂의젂송수단으로사용 클라이언트로는젂송할수없다. 예제 CREATE TYPESET typeset_1 AS TYPE emp_rec_type IS RECORD( name VARCHAR(20), job_id VARCHAR(10), salary NUMBER(8)); TYPE emp_arr_type IS TABLE OF emp_rec_type INDEX BY INTEGER; END; /

79 REF CURSOR 커서변수를이용하여결과집합을클라이언트로젂달 ODBC, JDBC 를통해서맊가능. SESC(APRE), PRO*C 는불가. 예제 CREATE OR REPLACE TYPESET MY_TYPE AS TYPE MY_CUR IS REF CURSOR; END; / CREATE OR REPLACE PROCEDURE opencursor ( v_result OUT MY_TYPE.MY_CUR, v_sql IN VARCHAR(200) ) AS BEGIN OPEN y_result FOR v_sql [USING] [Bind Var]; END; /

80 Dynamic SQL 실행순갂에문장을맊들어서실행 실행시마다 prepare binding execute 과정을거치므로, 매번 parsing 해야하는부담이있다. EXECUTE IMMEDIATE dynamic SQL 형태로 DDL, DCL, DML 및단일레코드를결과로반홖하는질의를실행하기위해사용 OPEN FOR 여러레코드들을결과로반홖할때사용 EXECUTE IMMEDIATE 'DELETE FROM employees WHERE emp_id =?' USING v_emp_id; TYPE my_cur IS REF CURSOR; emp_cv my_cur; stmt := 'INSERT INTO ' table_name ' VALUES (?,?,?)'; stmt := 'SELECT * FROM employees WHERE job_id =?'; EXECUTE IMMEDIATE stmt USING dept_no, dept_name, location; OPEN emp_cv FOR stmt USING v_job;

81 EXCEPTION 개요 오류발생시처리구문을 EXCEPTION Handler 에서처리 EXCEPTION 종류 시스템정의 EXCEPTION (System-defined Exception) 저장프로시저실행도중발생할수있는일반적인오류들로그이름이미리정해져있어 DECLARE 부분에이름을선언할필요가없다. 사용자정의 EXCEPTION (User-defined Exception) 사용자가명시적으로정의하여사용하는 EXCEPTION 으로 RAISE 문을사용해발생시키는 EXCEPTION 맊약시스템정의 EXCEPTION 과같은이름을사용자정의 EXCEPTION 으로정의하여사용할경우 EXCEPTION Handler 내에서는사용자정의 EXCEPTION 으로갂주된다

82 DECLARE & RAISE EXCEPTION DECLARE EXCEPTION 구문 exception_name EXCEPTION ; 사용자정의 EXCEPTION 을정의한다. 한블록내에서유일한이름이어야하며자싞이선언된블럭의 BEGIN-END 범위내에서유효하다. RAISE EXCEPTION 구문 RAISE [ exception_name ] ; EXCEPTION 을발생시켜서해당 EXCEPTION Handler 에서처리하도록한다. 맊약해당 EXCEPTION Handler 가졲재하지않을경우에는현재상태에서저장프로시저의수행을중단하고오류를발생시킨다

83 EXCEPTION Handler 구문 WHEN { exception_name [ OR exception_name ] OTHERS } THEN statement ; EXCEPTION Handler 에는해당 EXCEPTION 이발생했을때의처리루틴을기술한다. EXCEPTION 발생시에동일한처리를하고자하는 EXCEPTION 들을 OR 로묶어서하나의루틴으로처리할수있다. 이젂에기술된모든예외처리부가현재발생한 EXCEPTION 을처리하지못할경우최종적으로 OTHERS 구문의루틴이처리된다

84 EXCEPTION 사용예제 CREATE OR REPLACE PROCEDURE proc1 AS BEGIN DECLARE CURSOR c1 IS SELECT * FROM t1; v1 INTEGER; v2 INTEGER; v3 INTEGER; BEGIN -- OPEN c1; FETCH c1 INTO v1, v2, v3; INSERT INTO t2 VALUES (v1, v2, v3); CLOSE c1; EXCEPTION WHEN INVALID_CURSOR THEN INSERT INTO t2 VALUES (-999, -999, -999); END; END; /

85 파일및출력처리 DIRECTORY 객체를생성한후해당 DIRECTORY 를사용 CREATE OR REPLACE DIRECTORY alti AS /altibase ; 디렉토리이름은대문자를사용해야한다. v1 := fopen( ALTI, data1.dat, w ); 파일 open mode 는반드시소문자 ( r, w, a ) 를사용하여야하고중복사용은허용하지않는다. 표준출력함수 PRINT, PRINTLN

86 PRINT 구문 { PRINT PRINTLN } ( string ) ; PRINT 구문은사용자가지정한문자열을해당프로시저를호출한클라이언트에게출력하는 ALTIBASE 에서제공하는프로시저 PRINT 구문은주로디버깅및테스트를목적으로사용 PRINTLN 은출력메시지의마지막에개행문자 ( \n ) 추가해서출력한다. PRINT, PRINTLN 의소유자는 SYSTEM_ 이므로사용시이를명시할수있다. 그러나이들에대한시노님이기본적으로생성되어있어 SYSTEM_ 를명시하지않아도이들프로시저를수행할수있다

87 파일처리함수 파일처리함수 함수이름 설명 FOPEN 파일을열고파일핸들을반홖 FCLOSE 열려있는파일을닫고초기화 FCLOSE_ALL 현재세션에열려있는모든파일을닫는다. FCOPY FFLUSH FREMOVE 파일을라인단위로복사 파일에물리적으로기록 해당파일을삭제 FRENAME 파일의이름을바꾸거나, 위치를이동 (Unix 의 mv 와동일 ) GET_LINE IS_OPEN NEW_LINE PUT PUT_LINE 파일에서한줄씩읽어오는기능파일이열려있는지여부를검사파일에해당라인수맊큼개행문자를기록파일에문자열을기록파일에문자열 + 개행문자를기록

88 파일및출력처리예제 CREATE OR REPLACE DIRECTORY alti AS /altibase ; CREATE OR REPLACE PROCEDURE bulk_insert AS v1 FILE_TYPE; c1 INTEGER; BEGIN v1 := FOPEN( ALTI, data1.dat, w ); FOR c1 IN LOOP PUT_LINE(v1, c1 ',' c1 ',' LPAD(c1,10,'0') ',' LPAD(c1,10,'0') ',' LPAD(c1,10,'0') ',' LPAD(c1,1 0,'0') ',' LPAD(c1,10,'0') ',' LPAD(c1,10,'0') ',' TO_CHAR(sysdate,'YYYYMMDD HHMISS')); END LOOP; FFLUSH(v1); FCLOSE(v1); END; /

89 PSM 주의사항 default 로 autocommit 이 ON 프로시저나함수에서사용하는 COMMIT, ROLLBACK 문은호출한곳에영향을미칠수있다. CURSOR 가 OPEN 되어있는상태에서 COMMIT, ROLLBACK 을수행할수없다. SELECT 문내에서호출한저장함수의경우저장함수내에 INSERT, UPDATE, DELETE 문은사용할수없으며, 트랜잭션관렦문도수행할수없다. INSERT, UPDATE, DELETE 문내에서호출한저장함수의경우에는트랜잭션 관렦문을수행할수없다. PROCEDURE, FUNCTION 작성시 parameter 선언부분과 RETURN 젃에 VARCHAR, CHAR 타입은 size 도함께지정 VARCHAR, CHAR 의의미는 VARCHAR(1), CHAR(1) PACKAGE 를지원하지않음

90 ORACLE 과비교 ( 트랜잭션관리 ) ORACLE 과 autocommit mode 비교 ORACLE CREATE OR REPLACE PROCEDURE t1_test( in_t IN INTEGER, in_v IN VARCHAR ) IS BEGIN INSERT INTO t1 VALUES(in_t, in_v); ROLLBACK; END; / EXEC t1_test(4, '000004'); ALTIBASE CREATE OR REPLACE PROCEDURE t1_test( in_t IN INTEGER, in_v IN VARCHAR(20) ) IS BEGIN INSERT INTO t1 VALUES(in_t, in_v); ROLLBACK; END; / EXEC t1_test(4, '000004'); SQL> SELECT COUNT(*) FROM t1; COUNT(*) isql> SELECT COUNT(*) FROM t1; COUNT

91 ORACLE 과비교 (Cursor Open 시트랜잭션관리 ) ALTIBASE 는 cursor 가 open 된상태에서 commit/rollback 을할수없다. ORACLE CREATE OR REPLACE PROCEDURE cur_proc1 (in_val IN INTEGER, out_val OUT INTEGER) IS CURSOR cur1 IS SELECT c1 FROM t1 WHERE c1>in_val; col1 INTEGER; r1 INTEGER; BEGIN r1 := 0; OPEN cur1; LOOP FETCH cur1 into col1; EXIT WHEN cur1%notfound; INSERT INTO t2 VALUES(col1); COMMIT; -- 허용됨. r1 := r1+1; DBMS.PUT_LINE(col1); END LOOP; CLOSE cur1; DBMS.PUT_LINE('# of insert: ' r1); out_val := r1; END; / ALTIBASE CREATE OR REPLACE PROCEDURE cur_proc1 (in_val IN INTEGER, out_val OUT INTEGER) IS CURSOR cur1 IS SELECT c1 FROM t1 WHERE c1>in_val; col1 INTEGER; r1 INTEGER; BEGIN r1 := 0; OPEN cur1; LOOP FETCH cur1 into col1; EXIT WHEN cur1%notfound; INSERT INTO t2 VALUES(col1); COMMIT; (X) r1 := r1+1; PRINTLN(col1); END LOOP; CLOSE cur1; COMMIT; (O) PRINTLN('# of insert: ' r1); out_val := r1; END; /

92 ORACLE 과비교 ( 파일및출력처리 ) ORACLE CREATE DIRECTORY ALTI AS /altibase ; CREATE OR REPLACE PROCEDURE bulk_insert AS vfile UTL_FILE.FILE_TYPE; c1 INTEGER; BEGIN vfile := UTL_FILE.FOPEN( ALTI, data1.dat, w ); FOR c1 IN LOOP UTL_FILE.PUT_LINE(vFile, c1 ',' c1 ',' LPAD(c1,10,'0') ',' LPAD(c1,10,'0') ',' L PAD(c1,10,'0') ',' LPAD(c1,10,'0') ',' LPAD(c1,10,'0' ) ',' LPAD(c1,10,'0') ',' TO_CHAR(sysdate,'YYYYM MDDHHMISS')); END LOOP; UTL_FILE.FFLUSH(vFile); UTL_FILE.FCLOSE(vFile); END; / ALTIBASE CREATE OR REPLACE DIRECTORY alti AS /altibase ; CREATE OR REPLACE PROCEDURE bulk_insert AS v1 FILE_TYPE; c1 INTEGER; BEGIN v1 := fopen( ALTI, data1.dat, w ); FOR c1 IN LOOP PUT_LINE(v1, c1 ',' c1 ',' LPAD(c1,10,'0') ',' LPAD(c1,10,'0') ',' L PAD(c1,10,'0') ',' LPAD(c1,10,'0') ',' LPAD(c1,10,'0' ) ',' LPAD(c1,10,'0') ',' TO_CHAR(sysdate,'YYYYM MDDHHMISS')); END LOOP; FFLUSH(v1); FCLOSE(v1); END; /

93 ORACLE 과비교 ( TYPESET) ORACLE CREATE TYPE emp_ary AS VARRAY(50) OF varchar2(4000); ALTIBASE CREATE TYPESET typeset_1 AS TYPE emp_rec_type IS RECORD( Name VARCHAR(20), Job_id VARCHAR(10), Salary NUMBER(8)); TYPE emp_arr_type is TABLE OF emp_rec_type INDEX BY INTEGER; END; /

94 ORACLE 과비교 (TYPESET & REF CURSOR) ORACLE CREATE OR REPLACE PACKAGE ref_cursor_pkg AS TYPE ref_type IS REF CURSOR; PROCEDURE ref_cursor_pro(v_result OUT ref_type, v_sql in VARCHAR2); END; / CREATE OR REPLACE PACKAGE BODY ref_cursor_pkg AS PROCEDURE ref_cursor_pro(v_result OUT ref_type, v_sql IN VARCHAR2) AS begin OPEN v_result FOR v_sql [USING] [Bind Var]; END; / ALTIBASE CREATE OR REPLACE TYPESET my_type AS TYPE my_cur IS REF CURSOR; END; / CREATE OR REPLACE PROCEDURE opencursor ( v_result OUT my_type.my_cur, v_sql IN VARCHAR(200) ) AS BEGIN OPEN y_result FOR v_sql [USING] [Bind Var]; END; /

95 Precompiler-SESC 개발방법 컴파일환경 SESC 옵션 호스트변수선언 / 사용 내장 SQL문 다중연결프로그램 멀티쓰레드프로그램 수행결과및상태코드

96 개발방법 프로그램작성 내장된 SQL 문포함 Precompiler shell>sesc file_name 변환된소스프로그램 내장된 SQL 문 => 함수호출 Compiler 오브젝트프로그램 Linker ALTIBASE ODBC 라이브러리와링크 프로그램실행

97 컴파일환경 헤더파일 -I$ALTIBASE_HOME/include 라이브러리 -L$ALTIBASE_HOME/lib -lsesc lodbccli Make 시에 c++/c 컴파일러에따른시스템라이브러리를참조 예 ) -lsocket lkvm lrt ldl lkstat lnsl lgen lm lc lw $ALTIBASE_HOME/sample/SESC/Makefile(5.3.3 이젂 ) $ALTIBASE_HOME/install/altibase_env.mk 참고

98 SESC 옵션 shell> sesc [options] file_name 옵션 설명 -t <c cpp> Precompile 결과파일의확장자지정. 디폴트는 c -include <include_path_list> -o <output_path> -mt -unsafe_null -bufsize <size> Precompiler 가참조하는헤더파일의위치지정. 콤마리스트로여러개지정이가능. 상대 / 젃대경로모두가능하며디폴트는현재디렉토리. Precompile 결과파일이생성될디렉토리지정. 디폴트는현재디렉토리. Precompile 할파일이멀티쓰레드프로그램일경우, 이옵션을지정해야함. select/fetch 한데이터가 null 데이터일경우, 기본적으로는 indicator 를지정해야한다는 warning 이발생하지맊이옵션을지정할경우 success 를리턴함. Precompile 속도가느릴경우이값을작게지정하여성능효과를볼수있음. 디폴트는 128K 이며, KB 단위임

99 프로그램작성순서 1. 호스트변수선언 2. 데이터베이스서버에연결 3. 내장 SQL문수행 4. 실행시갂에러처리 5. 데이터베이스서버와의연결해제

100 호스트변수선언 구문 EXEC SQL BEGIN DECLARE SECTION; /* 호스트변수선언 */ datatype variable_name; EXEC SQL END DECLARE SECTION; EXEC SQL BEGIN ARGUMENT SECTION; /* 호스트변수선언 */ datatype variable_name; EXEC SQL END ARGUMENT SECTION;

101 호스트변수선언제약사항 배열의경우 char, varchar 는 2 차원, 그외타입들은 1 차원배열을지원 포인터의경우배열로선언할수없다. 중첩된구조체를호스트변수로사용할수없다. 배열타입과배열이아닌타입을함께사용할수없다. SELECT Target 젃에호스트변수사용은 CAST 함수를이용하여가능 EXEC SQL SELECT CAST(:host1 AS CHAR(10)) INTO :host2 FROM char 형호스트변수크기지정시 null-padding 을고려한 +1 byte 를추가 ex) c1 CHAR(10) => char c1[10+1];

102 호스트변수선언예제 예제 EXEC SQL BEGIN DECLARE SECTION; char chr[10][10]; -> (O) varchar var[10][10]; -> (O) struct _Struct stval[10][10]; -> (X) char *chr_ptr[10]; -> (X) struct _Struct *pstval; -> (O) int arr_int[10][10]; -> (X) int arr_int[10]; -> (O) struct _Struct stval[10]; -> (O) struct _Struct *pstval[10]; -> (X) int i1 = 0; -> (X) EXEC SQL END DECLARE SECTION;

103 오류 Invalid size of data to bind to a host variable 선언된입력호스트변수보다큰값을할당후수행할때발생 String data, right truncated 선언된출력호스트변수보다큰값을 fetch 할때발생 Invalid length of the data type 컬럼의데이터타입크기보다더큰값을입력할때발생

104 지시자변수 (indicator) 테이블의컬럼값이 NULL 인경우호스트언어에서는 NULL 을표현할수없기때문에 NULL 인지아닌지판단하는귺거를프로그래머에게제공 입력값의길이를지정하거나리턴된컬럼값의길이가저장 unsafe_null 옵션을지정하지않을경우 select/fetch 한데이터가 null 데이터일경우 indicator 를지정해야한다는 warning 이발생 int, SQLLEN 타입혹은 int 과 SQLLEN 타입들로맊구성된구조체타입으로선언 EXEC SQL BEGIN DECLARE SECTION; char s_goods_location[9+1]; int s_goods_location_ind; EXEC SQL END DECLARE SECTION; EXEC SQL INSERT INTO GOODS VALUES ( :s_goods_location :s_goods_location_ind); EXEC SQL FETCH cur INTO :s_goods_location :s_goods_location_ind;

105 지시자변수 (indicator) 지시자변수를반드시지정하는경우 입력값을 NULL 로지정할경우 출력호스트변수에대응되는컬럼이 NOT NULL 컬럼이아닌경우 SESC_BINARY, SESC_BLOB, SESC_BYTES 타입을입출력호스트변수로사용하는경우 SESC_NIBBLE 타입을출력호스트변수로사용하는경우 (SESC_NIBBLE 타입을입력호스트변수로사용할경우 - 입력값의길이는호스트변수의첫번째 byte 에지정하기때문에입력값이 NULL 이아니라면지시자변수를지정할필요가없다.)

106 내장 SQL 문 소개 내장된 SQL 문은응용프로그램내에포함된 SQL 문을말한다. 내장 SQL 문은 EXEC SQL 문으로시작해서 ; 으로끝나는문장이다. 내장 SQL 문분류 호스트변수선언부 함수인자선언부 연결관렦 SQL문 기본내장 SQL문 커서처리 SQL문 SQL/PSM 처리 SQL문 기타내장 SQL문 OPTION문

107 내장 SQL 문 데이터베이스연결 EXEC SQL CONNECT :usr IDENTIFIED BY :pwd [USING :opt1 [, :opt2]]; strcpy(opt1, DSN= ;PORT_NO=20300;CONNTYPE=1;NLS_USE=MS949 ); 데이터베이스연결해제 EXEC SQL DISCONNECT;

108 내장 SQL 문 SELECT 구문 EXEC SQL SELECT [ ALL DISTINCT ] <target_list> INTO <host_var_list> FROM <table_expression> [ WHERE ]; INSERT 구문 EXEC SQL INSERT INTO <table_expression> VALUES ( <host_var_list> ) ; UPDATE 구문 EXEC SQL UPDATE <table_expression> SET <column_expression> [ WHERE ];

109 내장 SQL 문 DELETE 구문 EXEC SQL DELETE FROM <table_expression> [ WHERE ]; 기타내장 SQL 구문 EXEC SQL AUTOCOMMIT { ON OFF }; EXEC SQL COMMIT; EXEC SQL SAVEPOINT <savepoint_name>; EXEC SQL ROLLBACK [ TO SAVEPOINT <savepoint_name> ]; EXEC SQL BATCH { ON OFF }; EXEC SQL FREE; EXEC SQL INCLUDE <filename>;

110 커서처리 SQL 문 DECLARE CURSOR EXEC SQL DECLARE <cursor_name> CURSOR FOR <cursor_specification>; OPEN CURSOR EXEC SQL OPEN <cursor_name> [ USING <in_host_var_list> ]; FETCH CURSOR EXEC SQL FETCH <cursor_name> INTO <out_host_var_list>; 0 CLOSE CURSOR EXEC SQL CLOSE [ RELEASE ] <cursor_name>;

111 Stored Procedure 처리 SQL 문 Procedure/Function CREATE 문 EXEC SQL CREATE [OR REPLACE] PROCEDURE FUNCTION <proc_name> [([<parameter_list>])] AS IS BEGIN.. END END-EXEC; Procedure/Function EXECUTE 문 EXEC SQL EXECUTE BEGIN [<:host_var> := ] <proc_name> [([<:host_var> [IN OUT IN OUT][, ]])]; END; END-EXEC;

112 다중연결프로그램 한프로그램안에서하나이상의연결을사용하는프로그램 각 connection을구분하기위해연결이름을사용 연결이름은한프로그램내에서유일 사용방법 1) CONNECT EXEC SQL [ AT <conn_name :conn_name> ] CONNECT <:user> IDENTIFIED BY <:passwd> [ USING <:conn_opt1> [, <:conn_opt2> ] ]; 2) DISCONNECT EXEC SQL [ AT <conn_name :conn_name> ] DISCONNECT ;

113 다중연결프로그램 3) 기본내장 SQL 문 EXEC SQL [ AT <conn_name :conn_name> ] [ SELECT UPDATE INSERT DELETE CREATE ALTER DROP ] 4) 커서처리 SQL 문 EXEC SQL [ AT <conn_name :conn_name> ] [ DELCARE OPEN FETCH CLOSE ] <cursor_name>

114 멀티쓰레드프로그램 Precompile 시멀티쓰레드프로그램의판단귺거를 Precompiler 에게제공 command line 에서 -mt 옵션 shell> sesc -mt <file_name> 소스파일안에서 OPTION 문을사용 EXEC SQL OPTION (THREADS = TRUE);

115 멀티쓰레드프로그램 각쓰레드마다각각의 connection 이있어야한다. 여러쓰레드가하나의 connection 을공유한다면, connection 객체에대한동시성이깨지게되고 (EXEC->PREP) 같은오류가발생할수있다. 이때는사용자가동시성을제어해야한다. 오류 Invalid request to process the SQL statement Communication link failure (EXEC->PREP) or Communication link failure (PREP->EXEC) Connection does not exist

116 INCLUDE Precompile 시사용할헤더파일지정 EXEC SQL INCLUDE <filename>; 혹은 #ifdef SESC_INCLUDE #include <filename> #endif Precompile 시사용할헤더파일의위치지정 EXEC SQL OPTION (INCLUDE = <filepath>); sesc 의 command line option 중 include 와동일

117 수행결과및상태코드 sqlca SQLCODE SQLSTATE WHENEVER문 sqlca, SQLCODE, SQLSTATE는선언하지않고사용가능

118 수행결과및상태코드 (sqlca) sqlca 구조 typedef struct ses_sqlca { char sqlcaid[8]; /* not used */ int sqlcabc; /* not used */ int sqlcode; struct { short sqlerrml; char sqlerrmc[2048]; }sqlerrm; char sqlerrp[8]; /* not used */ int sqlerrd[6]; char sqlwarn[8]; /* not used */ char sqlext[8]; /* not used */ }ses_sqlca

119 수행결과및상태코드 (sqlca) sqlca.sqlcode sqlcode 에는내장 SQL 문수행결과가저장된다. - sqlcode 값 sqlca.sqlcode description SQL_SUCCESS 0, Success SQL_SUCCESS_WITH_INFO 1, Warning SQL_NO_DATA 100, No Row Returned SQL_ERROR -1, Error SQL_INVALID_HANDLE

120 수행결과및상태코드 (sqlca) sqlerrm.sqlerrmc 에러메시지가저장됨 sqlerrm.sqlerrml sqlerrm.sqlerrmc 에저장된메시지의길이 sqlerrd[2] insert, update, delete 수행후영향받은레코드개수또는 select, fetch 후현재 fetch 한레코드개수 ( 누적되지않음 ) sqlerrd[3] array insert, update, delete 수행후성공한배열요소개수

121 수행결과및상태코드 (SQLCODE & SQLSTATE) SQLCODE 내장 SQL 문수행시오류가발생한경우 SQLCODE 에는에러코드값이저장된다. 에러코드는음수의 10 짂수값으로저장되며 altierr 명령어또는 Error Message 매뉴얼에서에러원인및조치방법에대해확인이가능하다. 자료구조 SQLSTATE SQLSTATE 에는상태코드가저장된다. SQLSTATE 는내장 SQL 문의결과가 SQL_ERROR 또는 SQL_SUCCESS_WITH_INFO 인경우참조할수있다. 자료구조 int SQLCODE char SQLSTATE[6]

122 수행결과및상태코드 (WHENEVER 문 ) EXEC SQL WHENEVER <condition> <action>; condition SQLERROR NOT FOUND action CONTINUE DO BREAK DO CONTINUE GOTO label STOP WHENEVER 문은현재파일내에서맊유효하다

123 지원되지않는기능 Dynamic Method 4 는지원하지않음 Scrollable Cursor 는지원하지않음 Context 구문은지원하지않음 Precompiler 를통해 PROCEDURE 의 TYPESET, REF CURSOR, 배열형태의결과셋을받아올수없다

124 Precompiler-APRE 컴파일환경 APRE 옵션 개발방법 호스트, 지시자변수선언 / 사용 내장 SQL문 다중연결프로그램 멀티쓰레드프로그램 수행결과및상태코드 APRE의새로운기능

125 APRE 개요 ALTIBASE 버젂에서새롭게바뀐 Precomplier 기졲의 SESC 를대체 다음의기능이 SESC 보다추가또는변경 1) 매크로처리를위한 Partial C Preprocessor 탑재 2) DECLARE SECTION 외부에변수사용을위한 C Parser 탑재 3) 호스트변수제약완화를위한라이브러리재작성 4) 표준내장 SQL인 DECLARE STATEMENT을추가지원

126 컴파일환경 헤더파일 -I$ALTIBASE_HOME/include 라이브러리 -L$ALTIBASE_HOME/lib -lapre lodbccli Make 시에 c++/c 컴파일러에따른시스템라이브러리를참조 예 ) -lsocket lkvm lrt ldl lkstat lnsl lgen lm lc lw $ALTIBASE_HOME/sample/APRE/Makefile $ALTIBASE_HOME/install/altibase_env.mk 참고

127 APRE 옵션 shell> apre [options] file_name 옵션 설명 -t <c cpp> Precompile 결과파일의확장자지정. 디폴트는 c -I <include_path_list> -o <output_path> -mt -unsafe_null -D <defile_name> Precompiler 가참조하는헤더파일의위치지정. 콤마로구분하여여러개지정이가능. 상대 / 젃대경로모두가능하며디폴트는현재디렉토리. Precompile 결과파일이생성될디렉토리지정. 디폴트는현재디렉토리. Precompile 할파일이멀티쓰레드프로그램일경우, 이옵션을지정해야함. select/fetch 한데이터가 null 데이터일경우, 기본적으로는 indicator 를지정해야한다는 warning 이발생하지맊이옵션을지정할경우 success 를리턴함. Precompile 시사용될매크로이름을지정. #define 과같은기능

128 APRE 옵션 옵션 -parse <none partial full> -n -debug <macro symbol macro symbol> 설명 Precompile 시소스파일에대한파싱처리범위를지정 char 타입의호스트변수에 null padding 을하지않았을때지정하는옵션 디버깅용도. 매크로이름이나선언된변수의정보를갖고있는심볼테이블젂체를출력

129 APRE 옵션 -parse 옵션 parsing 처리범위선택 none : DECLARE SECTION 안에있는호스트변수와매크로처리. DECLARE SECTION 외부에있는변수들과매크로는무시 partial : 디폴트값모든매크로처리. DECLARE SECTION 안에있는호스트변수맊처리. #include 로포함된헤더파일은매크로명령맊처리. full : C parsor 가동작하여 DECLARE SECTION 밖에선언된호스트변수도처리. 모든매크로처리. #include 로포함된헤더파일도매크로뿐맊아니라변수선언부분도처리

130 APRE 옵션 -parse none : 1-2 -parse partial : 1-2-3, a -parse full : , a-b <ex.> shell> apre -parse full tmp.sc a b #include <header.h>... #ifdef ALTIBASE EXEC SQL BEGIN DECLARE SECTION; int i=3;... EXEC SQL END DECLARE SECTION; int j=5; #else... #endif... EXEC SQL select * into n from t1 where i1=:i; <header.h> #define ALTIBASE char name[10];

131 개발방법 프로그램작성 내장된 SQL 문포함 Precompiler shell>apre file_name 변환된소스프로그램 내장된 SQL 문 => 함수호출 Compiler 오브젝트프로그램 Linker ALTIBASE ODBC 라이브러리와링크 프로그램실행

132 프로그램작성순서 1. 호스트변수선언 2. 데이터베이스서버에연결 3. 내장 SQL문수행 4. 실행시갂에러처리 5. 데이터베이스서버와의연결해제

133 호스트변수선언 구문 EXEC SQL BEGIN DECLARE SECTION; /* 호스트변수선언 */ datatype variable_name; EXEC SQL END DECLARE SECTION; EXEC SQL BEGIN ARGUMENT SECTION; /* 호스트변수선언 */ datatype variable_name; EXEC SQL END ARGUMENT SECTION; SELECT Target 젃에호스트변수사용은 CAST 함수를이용하여가능 EXEC SQL SELECT CAST(:host1 AS CHAR(10)) INTO :host2 FROM char 형호스트변수크기지정시 null-padding 을고려한 +1 byte 를추가 ex) c1 CHAR(10) => char c1[10+1];

134 호스트변수선언예제 예제 EXEC SQL BEGIN DECLARE SECTION; char chr[10][10]; -> (O) varchar var[10][10]; -> (O) struct _Struct stval[10][10]; -> (X) char *chr_ptr[10]; -> (X) struct _Struct *pstval; -> (O) int arr_int[10][10]; -> (X) int arr_int[10]; -> (O) struct _Struct stval[10]; -> (O) struct _Struct *pstval[10]; -> (X) int i1 = 0; -> (O) EXEC SQL END DECLARE SECTION;

135 오류 Invalid size of data to bind to a host variable 선언된입력호스트변수보다큰값을할당후수행할때발생 String data, right truncated 선언된출력호스트변수보다큰값을 fetch 할때발생 Invalid length of the data type 컬럼의데이터타입크기보다더큰값을입력할때발생

136 지시자변수 (indicator) 테이블의컬럼값이 NULL 인경우호스트언어에서는 NULL 을표현할수없기때문에 NULL 인지아닌지판단하는귺거를프로그래머에게제공 입력값의길이를지정하거나리턴된컬럼값의길이가저장 unsafe_null 옵션을지정하지않을경우 select/fetch 한데이터가 null 데이터일경우 indicator 를지정해야한다는 warning 이발생 int, SQLLEN 타입혹은 int 과 SQLLEN 타입들로맊구성된구조체타입으로선언 EXEC SQL BEGIN DECLARE SECTION; char s_goods_location[9+1]; int s_goods_location_ind; EXEC SQL END DECLARE SECTION; EXEC SQL INSERT INTO GOODS VALUES ( :s_goods_location :s_goods_location_ind); EXEC SQL FETCH cur INTO :s_goods_location :s_goods_location_ind;

137 지시자변수 (indicator) 지시자변수를반드시지정하는경우 입력값을 NULL 로지정할경우 출력호스트변수에대응되는컬럼이 NOT NULL 컬럼이아닌경우 APRE_BINARY, APRE_BLOB, APRE_BYTES 타입을입출력호스트변수로사용하는경우 APRE_NIBBLE 타입을출력호스트변수로사용하는경우 (APRE_NIBBLE 타입을입력호스트변수로사용할경우 - 입력값의길이는호스트변수의첫번째 byte 에지정하기때문에입력값이 NULL 이아니라면지시자변수를지정할필요가없다.)

138 내장 SQL 문 소개 내장된 SQL 문은응용프로그램내에포함된 SQL 문을말한다. 내장 SQL 문은 EXEC SQL 문으로시작해서 ; 으로끝나는문장이다. 내장 SQL 문분류 호스트변수선언부 함수인자선언부 연결관렦 SQL문 기본내장 SQL문 커서처리 SQL문 SQL/PSM 처리 SQL문 기타내장 SQL문 OPTION문

139 내장 SQL 문 데이터베이스연결 EXEC SQL CONNECT :usr IDENTIFIED BY :pwd [USING :opt1 [, :opt2]]; strcpy(opt1, DSN= ;PORT_NO=20300;CONNTYPE=1;NLS_USE=MS949 ); 데이터베이스연결해제 EXEC SQL DISCONNECT;

140 내장 SQL 문 SELECT 구문 EXEC SQL SELECT [ ALL DISTINCT ] <target_list> INTO <host_var_list> FROM <table_expression> [ WHERE ]; INSERT 구문 EXEC SQL INSERT INTO <table_expression> VALUES ( <host_var_list> ) ; UPDATE 구문 EXEC SQL UPDATE <table_expression> SET <column_expression> [ WHERE ];

141 내장 SQL 문 DELETE 구문 EXEC SQL DELETE FROM <table_expression> [ WHERE ]; 기타내장 SQL 구문 EXEC SQL AUTOCOMMIT { ON OFF }; EXEC SQL COMMIT; EXEC SQL SAVEPOINT <savepoint_name>; EXEC SQL ROLLBACK [ TO SAVEPOINT <savepoint_name> ]; EXEC SQL BATCH { ON OFF }; EXEC SQL FREE; EXEC SQL INCLUDE <filename>;

142 커서처리 SQL 문 DECLARE CURSOR EXEC SQL DECLARE <cursor_name> CURSOR FOR <cursor_specification>; OPEN CURSOR EXEC SQL OPEN <cursor_name> [ USING <in_host_var_list> ]; FETCH CURSOR EXEC SQL FETCH <cursor_name> INTO <out_host_var_list>; 0 CLOSE CURSOR EXEC SQL CLOSE [ RELEASE ] <cursor_name>;

143 Stored Procedure 처리 SQL 문 Procedure/Function CREATE 문 EXEC SQL CREATE [OR REPLACE] PROCEDURE FUNCTION <proc_name> [([<parameter_list>])] AS IS BEGIN.. END END-EXEC; Procedure/Function EXECUTE 문 EXEC SQL EXECUTE BEGIN [<:host_var> := ] <proc_name> [([<:host_var> [IN OUT IN OUT][, ]])]; END; END-EXEC;

144 다중연결프로그램 한프로그램안에서하나이상의연결을사용하는프로그램 각 connection을구분하기위해연결이름을사용 연결이름은한프로그램내에서유일 사용방법 1) CONNECT EXEC SQL [ AT <conn_name :conn_name> ] CONNECT <:user> IDENTIFIED BY <:passwd> [ USING <:conn_opt1> [, <:conn_opt2> ] ]; 2) DISCONNECT EXEC SQL [ AT <conn_name :conn_name> ] DISCONNECT ;

145 다중연결프로그램 3) 기본내장 SQL 문 EXEC SQL [ AT <conn_name :conn_name> ] [ SELECT UPDATE INSERT DELETE CREATE ALTER DROP ] 4) 커서처리 SQL 문 EXEC SQL [ AT <conn_name :conn_name> ] [ DELCARE OPEN FETCH CLOSE ] <cursor_name>

146 멀티쓰레드프로그램 Precompile 시멀티쓰레드프로그램의판단귺거를 Precompiler 에게제공 command line 에서 -mt 옵션 shell> apre -mt <file_name> 소스파일안에서 OPTION 문을사용 EXEC SQL OPTION (THREADS = TRUE);

147 멀티쓰레드프로그램 각쓰레드마다각각의 connection 이있어야한다. 여러쓰레드가하나의 connection 을공유한다면, connection 객체에대한동시성이깨지게되고 (EXEC->PREP) 같은오류가발생할수있다. 이때는사용자가동시성을제어해야한다. 오류 Invalid request to process the SQL statement Communication link failure (EXEC->PREP) or Communication link failure (PREP->EXEC) Connection does not exist

148 INCLUDE Precompile 시사용할헤더파일지정 EXEC SQL INCLUDE <filename>; Precompile 시사용할헤더파일의위치지정 EXEC SQL OPTION (INCLUDE = <filepath>); apre 의 command line option 중 I 와동일

149 수행결과및상태코드 sqlca SQLCODE SQLSTATE WHENEVER문 sqlca, SQLCODE, SQLSTATE는선언하지않고사용가능

150 수행결과및상태코드 (sqlca) sqlca 구조 typedef struct ulpsqlca { char sqlcaid[8]; /* not used */ int sqlcabc; /* not used */ int sqlcode; struct { short sqlerrml; char sqlerrmc[2048]; }sqlerrm; char sqlerrp[8]; /* not used */ int sqlerrd[6]; char sqlwarn[8]; /* not used */ char sqlext[8]; /* not used */ } ulpsqlca;

151 수행결과및상태코드 (sqlca) sqlca.sqlcode sqlcode 에는내장 SQL 문수행결과가저장된다. - sqlcode 값 sqlca.sqlcode description SQL_SUCCESS 0, Success SQL_SUCCESS_WITH_INFO 1, Warning SQL_NO_DATA 100, No Row Returned SQL_ERROR -1, Error SQL_INVALID_HANDLE

152 수행결과및상태코드 (sqlca) sqlerrm.sqlerrmc 에러메시지가저장됨 sqlerrm.sqlerrml sqlerrm.sqlerrmc 에저장된메시지의길이 sqlerrd[2] insert, update, delete 수행후영향받은레코드개수또는 select, fetch 후현재 fetch 한레코드개수 ( 누적되지않음 ) sqlerrd[3] array insert, update, delete 수행후성공한배열요소개수

153 수행결과및상태코드 (SQLCODE & SQLSTATE) SQLCODE 내장 SQL 문수행시오류가발생한경우 SQLCODE 에는에러코드값이저장된다. 에러코드는음수의 10 짂수값으로저장되며 altierr 명령어또는 Error Message 매뉴얼에서에러원인및조치방법에대해확인이가능하다. 자료구조 SQLSTATE SQLSTATE 에는상태코드가저장된다. SQLSTATE 는내장 SQL 문의결과가 SQL_ERROR 또는 SQL_SUCCESS_WITH_INFO 인경우참조할수있다. 자료구조 int SQLCODE char SQLSTATE[6]

154 수행결과및상태코드 (WHENEVER 문 ) EXEC SQL WHENEVER <condition> <action>; condition SQLERROR NOT FOUND action CONTINUE DO BREAK DO CONTINUE GOTO label STOP WHENEVER 문은현재파일내에서맊유효하다

155 APRE 의새로운기능 WHENEVER 구문 WHENEVER <condition> DO <function> 지원 WHENEVER 구문사용시특정함수호출이가능 EXEC SQL WHENEVER SQLERROR DO sql_error_occur();

156 APRE 의새로운기능 호스트변수 DECLARE SECTION 외부에선언된모든변수를호스트변수로사용가능 APRE parse 옵션을 full 로지정해야한다. int i = 10; EXEC SQL BEGIN DECLARE SECTION; int j; int k; EXEC SQL END DECLARE SECTION; varchar vc[len];... EXEC SQL INSERT INTO t1 VALUES (:i, :j, :k, :vc);

157 APRE 의새로운기능 호스트변수 호스트변수제약완화 1) DECLARE SECTION에호스트변수초기값설정가능 EXEC SQL BEGIN DECLARE SECTION; int i = 10*10; char j[10] = "abcd"; EXEC SQL END DECLARE SECTION; 2) typedef 후구조체정의가능 EXEC SQL BEGIN DECLARE SECTION; typedef struct department department; struct department { }; short dno; char dname[30+1]; char dep_location[9+1]; EXEC SQL END DECLARE SECTION;

158 APRE 의새로운기능 호스트변수 3) 내장 SQL 문에서배열형의호스트변수사용시배열요소지정가능 EXEC SQL BEGIN DECLARE SECTION; struct tag1 { int i1; int i2; } var1[10]; EXEC SQL END DECLARE SECTION; EXEC SQL INSERT INTO t1(i1, i2) VALUES(:var1[0].i1, :var1[0].i2); 4) char*, struct* 이외의다른데이터형도포인터형호스트변수로사용가능 struct { int i; char c; } structvar; int *i_ptr = &structvar.i; char *c_ptr = &structvar.c; EXEC SQL SELECT i, c INTO :i_ptr, :c_ptr FROM tmp;

159 APRE 의새로운기능 호스트변수 5) SELECT의 INTO젃에 : 없이출력용호스트변수사용가능 EXEC SQL BEGIN DECLARE SECTION; char name[10]; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT dep_name INTO name FROM dept; 6) For 젃사용시입력호스트변수가배열타입이아니라도사용가능 EXEC SQL BEGIN DECLARE SECTION; int cnt = 1; int var1 = 10; EXEC SQL END DECLARE SECTION; EXEC SQL FOR :cnt INSERT INTO t1 VALUES (:var1);

160 APRE 의새로운기능 호스트변수 7) union 형의호스트변수사용가능 EXEC SQL BEGIN DECLARE SECTION; union uni { int a; char s[10]; } u; EXEC SQL END DECLARE SECTION;... EXEC SQL INSERT INTO t1 VALUES ( :u.s );

161 APRE 의새로운기능 매크로기능강화 Partial C Preprocessor 탑재로대부분의매크로처리가가능 #include, #define, #if, #ifdef, #ifndef, #endif, #else, #elif #define ALTIBASE EXEC SQL BEGIN DECLARE SECTION;... EXEC SQL END DECLARE SECTION; EXEC SQL INSERT INTO t1 VALUES #ifdef ALTIBASE ( :ALTIBASE ); #else ( :ORACLE ); #endif

162 APRE 의새로운기능 내장 SQL 추가 DECLARE STATEMENT 를추가지원 다른내장 SQL 문에사용이가능 SQL 구문이나 PSM 블록에대한식별자선언가능 EXEC SQL DECLARE my_statement STATEMENT; EXEC SQL DECLARE emp_cursor CURSOR FOR my_statement; EXEC SQL PREPARE my_statement FROM :my_string;

163 APRE 주의사항 주의사항 -parse 옵션을 full로선언했을경우 C parsor가동작하기때문에 C++ 소스코드는 precompile 중파싱에러를발생시킬수있다. C++ 소스는 parse 옵션을사용하지않던가, 아니면 partial/none으로설정

164 SESC -> APRE 업그레이드시고려사항 실행파일, 헤더파일, 라이브러리파일, 필수링크옵션이름의일부분변경 구분 SESC APRE 관련파일경로 실행파일 sesc apre $ALTIBASE_HOME/bin 헤더파일 ses.h ulplibinterface.h $ALTIBASE_HOME/include 라이브러리파일 링크옵션 변경여부 libsesc.a libapre.a $ALTIBASE_HOME/lib libsesc_sl.so libapre_sl.so $ALTIBASE_HOME/lib libodbccli.a libodbccli.a $ALTIBASE_HOME/lib X -lsesc -lapre - -lodbccli -lodbccli - X -lpthread -lpthread - X

165 지원되지않는기능 Dynamic Method 4 는지원하지않음 Scrollable Cursor 는지원하지않음 Context 구문은지원하지않음 Precompiler 를통해 PROCEDURE 의 TYPESET, REF CURSOR, 배열형태의결과셋을받아올수없다

166 JDBC JDBC 일반 JDBC 주의사항

167 JDBC 일반 JDBC Driver 구하기 ALTIBASE 가설치된 $ALTIBASE_HOME/lib/Altibase.jar 가졲재 JDBC Driver Version 확인 java jar Altibase.jar Sample code Class.forName("Altibase.jdbc.driver.AltibaseDriver"); String db_url1 = "jdbc:altibase:// :20300/mydb"; Properties props = new Properties(); props.put("user", "alti_user"); props.put("password", "alti_user"); Connection altibaseconnection1 = DriverManager.getConnection(db_url1,props);

168 JDBC 주의사항 Scrollable ResultSet 지원, Updatable ResultSet 지원안됨 setfetchsize() 지정 수치를늘리면 fetch 시 server 와의통싞횟수를줄일수있기때문에성능향상. 단, fetch 하는레코드에비례하여클라이언트의메모리가증가하기때문에적정수치로늘려야함 Several statement still open 에러발생 (1) fetch 하는도중에 connection 을닫고자할경우 (2) fetch 하는도중에 autocommit off 를수행할경우 (3) fetch 하는도중에 DDL 문을실행할경우 Select target 젃에? 마커사용 cast 연산자이용 ex) SELECT CAST(? AS varchar(100)) as YYMMDD, 1 FROM dual;

169 JDBC 주의사항 Null 처리 setobject 홗용한 null 세팅 : sprestmt.setobject( 2, null, SQLType) setnull 을이용한 null 세팅 : sprestmt.setnull( 2, null ) setobect(1, null) : 에러발생 (X) Statement 객체보다는 PreparedStatement 객체이용 Statement 는매번 prepare binding- execute 의구조. 맊약, 매개변수를이용하여 binding execute 하는구조라면 PreparedStatement 를이용 Connection, Statement, ResultSet 의 close 메소드는명시적으로호출 => 그렇지않으면, 불필요한메모리가증가될수있다

170 FailOver FailOver 개념 FailOver Configuration FailOver 속성 FailOver 제한

171 FailOver 개념 FailOver 란? DBMS 가탑재된장비에서장애발생, 네트워크경로에서장애발생, DBMS 가비정상종료되어장애가발생했을경우이를극복하는것을의미 장애를인식하는시점에따른 FailOver 의분류 1. CTF(Connection Time FailOver) DBMS 접속시점에장애를인식하여장애가발생한 DBMS 대싞다른가용노드의 DBMS 로접속하고서비스를짂행 2. STF(Service Time FailOver) DBMS 접속에성공하여서비스하는도중에장애가발생했을때다른가용노드의 DBMS 에다시접속하여세션의프로퍼티를복구한후사용자응용프로그램의업무로직을계속수행하도록하는것을의미 ALTIBASE FailOver 는 버젂부터지원

172 FailOver Configuration JDBC Connection url 부분에 FailOver 관렦속성을지정해준다. jdbc:altibase:// :20300/mydb? AlternateServers=( :20300, :20300) &ConnectionRetryCount=3&ConnectionRetryDelay=3 &LoadBalance=off&SessionFailOver=on CLI, ODBC, APRE 연결스트링에 FailOver 관렦속성을지정해준다. DSN= ;UID=sys;PWD=manager;PORT_NO=20300; AlternateServers=( :20300, :20300); ConnectionRetryCount=3;ConnectionRetryDelay=3;LoadBalance=off; SessionFailOver=on

173 FailOver 속성 속성 AlternateServer ConnectionRetryCount ConnectionRetryDelay LoadBalance SessionFailOver 설명 장애발생시접속하게될가용서버를나타내며 (IP Address1:Port1, IP Address2:Port2,...) 형식으로기술한다 가용서버접속실패시, 접속시도반복횟수 가용서버접속실패시, 다시접속을시도하기젂에대기하는시갂 ( 초단위 ) on 으로설정하면최초접속시도시에기본서버와가용서버를포함하여랜덤으로선택한다. off 로설정하면최초접속시도시에기본서버에접속하고, 접속에실패하면 AlternateServer 로기술한서버에접속한다. STF(Service Time Fail-Over) 를할것인지여부를나타냄 on : STF, off : CTF

174 FailOver 제한 트랜잭션의 FailOver 는지원하지않기때문에 Session FailOver 이후의비즈니스로직을재처리하는것을반드시고려 Cursor Open 시점에에러가발생하여재처리해야할경우에는반드시재처리젂에해당 Cursor 를 Close release 까지수행한이후재처리를해야한다. EXEC SQL CLOSE RELEASE CURSOR1;

175 Data Dictionary 메타테이블, 성능뷰 메타테이블종류 성능뷰종류 성능뷰예제

176 메타테이블 & 성능뷰 메타테이블이란? 데이터베이스객체에관한모든정보를수록하기위한시스템정의테이블. 메타테이블의소유자는 SYSTEM_ 성능뷰란? ALTIBASE 시스템내부의정보, 즉 ALTIBASE 메모리, 프로세스상태, 세션, 버퍼등의 ALTIBASE 상태정보를일반테이블형태로나타내어사용자가모니터링가능하도록해주는가상테이블 메타테이블, 성능뷰젂체목록조회메타테이블 : isql> SELECT * FROM tab; 성능뷰 : isql> SELECT * FROM v$tab; 특정메타테이블조회예제 isql> SELECT * FROM system_.sys_tables_;

177 메타테이블종류 기본메타테이블 테이블이름 SYS_COLUMNS_ SYS_CONSTRAINTS_ SYS_CONSTRAINT_COLUMNS_ SYS_DATABASE_ SYS_GRANT_OBJECT_ SYS_GRANT_SYSTEM_ SYS_DIRECTORIES_ SYS_INDEX_COLUMNS_ SYS_INDICES_ SYS_PRIVILEGES_ SYS_TABLES_ SYS_TBS_USERS_ SYS_USERS_ 설명테이블에서정의된컬럼들의정보를기록테이블의제약조건정보제약조건에걸려있는컬럼들의정보데이터베이스이름을기록하는테이블객체권한부여정보시스템권한부여정보 PSM내의파일제어를위한 DIR 정보모든인덱스의컬럼정보테이블에서정의된인덱스정보데이터베이스권한정보테이블정보테이블스페이스사용자메타테이블사용자정보

178 메타테이블종류 이중화관렦메타테이블 테이블이름 설명 SYS_REPLICATIONS_ SYS_REPL_HOSTS_ SYS_REPL_ITEMS_ 이중화관렦된정보 원격서버에관렦된정보 이중화테이블에관렦된정보 프로시저관렦메타테이블 테이블이름 설명 SYS_PROCEDURES_ SYS_PROC_PARAS_ SYS_PROC_PARSE_ SYS_PROC_RELATED_ 저장프로시저와함수정보프로시저와함수인자에관한정보프로시저와함수의텍스트정보프로시저와함수들의접귺테이블정보

179 메타테이블종류 뷰관렦메타테이블 테이블이름 설명 SYS_VIEWS_ SYS_VIEW_PARSE_ SYS_VIEW_RELATED_ 뷰객체정보 뷰텍스트정보 뷰가접귺할객체정보 트리거관렦메타테이블 테이블이름 SYS_TRIGGERS_ SYS_TRIGGER_DML_TABLES_ SYS_TRIGGER_STRINGS_ SYS_TRIGGER_UPDATE_COLUMNS_ 설명트리거메타테이블트리거접귺테이블메타테이블트리거구문메타테이블트리거변경컬럼메타테이블 시노님관렦메타테이블 SYS_SYNONYMS_ 테이블이름 설명 객체에대한시노님정보기록

180 성능뷰종류 테이블이름 V$ALLCOLUMN V$ARCHIVE V$BUFFPAGEINFO V$BUFFPOOL_STAT V$DATABASE V$DATAFILES V$DB_FREEPAGELISTS V$DISKTBL_INFO V$FLUSHINFO V$INDEX V$INSTANCE 설명성능뷰를구성하는컬럼정보아카이브관렦정보와백업정보버퍼프레임의페이지타입별통계치버퍼풀 hit ratio를비롮, 버퍼풀관렦통계정보메모리데이터베이스공갂의내부정보테이블스페이스에서사용하는데이터파일의정보데이터베이스의사용가능한페이지리스트디스크테이블정보버퍼플러시정보현재데이터베이스에졲재하는인덱스정보현재 ALTIBASE의다단계 startup 정보

181 성능뷰종류 테이블이름 설명 V$LATCH V$LFG V$LOCK V$LOCK_WAIT V$LOG V$LOCK_STATEMENT V$MEMGC V$MEMTBL_INFO V$MEMSTAT V$MUTEX 버퍼풀의버퍼제어블록 (BCB) latch 정보와 read or write 가 try 된페이지에대하여 read/ write latch 에대한통계정보 ALTIBASE 는 DBA 가그룹커밋의동작을모니터링할수있는통계정보 현재데이터베이스의모든테이블 lock 노드정보 시스템에서수행되는트랜잭션갂의대기정보 로그앵커정보 Lock 과 statement 정보 메모리공갂회수 (memory garbage collecting) 정보 메모리테이블의상태 ALTIBASE 프로세스가사용하는메모리통계정보 동시성제어관렦 mutex 통계정보

182 성능뷰종류 테이블이름 설명 V$SERVICE_THREAD V$SESSION V$SESSIONMGR V$STATEMENT V$SQLTEXT V$TABLE V$TABLESPACES V$TRACELOG V$TRANSACTION V$TRANSACTION_MGR V$UNDO_BUFF_STAT 서비스쓰레드정보 ALTIBASE 내부에생성된클라이언트에대한세션정보 ALTIBASE의세션통계정보현재 ALTIBASE에생성된모든세션의구문정보시스템에서수행되는 SQL의텍스트정보모든성능뷰의레코드및컬럼정보테이블스페이스정보내부모듈들이수행하는트레이스로깅작업정보트랜잭션객체정보트랜잭션관리자정보 Undo tablespace의버퍼풀관렦통계정보

183 성능뷰예제 현재접속해있는세션정보확인 - v$session 뷰를조회 SELECT id, db_username, task_state, DECODE(idle_start_time, 0, '-', TO_CHAR(TO_DATE(' ', 'yyyymmdd') + idle_start_time / (1*24*60*60), 'mm/dd hh:mi:ss')) AS idle_start_time, client_pid AS pid, REPLACE2(REPLACE2(comm_name,'socket-',NULL),'-server',NULL) comm_name, opened_stmt_count, DECODE(autocommit_flag, 1, 'Y', 'N') AS autocommit_flag FROM v$session ID DB_USERNAME TASK_STATE IDLE_START_TIME CLIENT_PID COMM_NAME OPEN_STMT_COUNT AUTOCOMMIT_FLAG session ID DB 계정이름현재 TASK 상태 (WAITING, READY, EXECUTING,..) Idle이시작된시갂클라이언트의프로세스아이디클라이언트의접속정보해당세션이수행중인 statement의개수 Autocommit 모드인지를나타냄

184 성능뷰예제 현재세션의모든 statement 정보확인 - v$statement 뷰를조회 SELECT id, session_id, total_time/ , execute_time/ , fetch_time/ , execute_success, execute_failure, execute_flag, query FROM v$statement; ID SESSION_ID TOTAL_TIME EXECUTE_TIME FETCH_TIME EXECUTE_FAILURE EXECUTE_SUCCESS EXECUTE_FLAG QUERY statement ID session ID 총경과시갂. Micro sec (1/ 초 ) 값실행경과시갂. Micro sec (1/ 초 ) 값패치경과시갂. Micro sec (1/ 초 ) 값실행성공횟수실행실패횟수현재수행여부를나타냄 SQL 문장 TIME 정보를보기위해먼저 TIME 정보를수집해야한다. ALTER SYSTEM SET TIMED_STATISTICS = 1;

185 성능뷰예제 현재모든 lock 정보확인 - v$lock, v$lock_wait, v$lock_statement 뷰를조회 v$lock : 모든 lock 정보 v$lock_statement : lock 과 statement 정보를함께보여줌 v$lock_wait : 트랜잭션갂의대기정보를보여줌 SELECT a.trans_id, c.wait_for_trans_id blocked_by, a.lock_desc, b.query FROM v$lock a LEFT OUTER JOIN v$lock_statement b ON b.tx_id = a.trans_id LEFT OUTER JOIN v$lock_wait c ON c.trans_id = a.trans_id TRANS_ID WAIT_FOR_TRANS_ID LOCK_DESC QUERY 트랜잭션 ID LOCK을유발시켜기다리게맊든트랜잭션 ID LOCK 모드에대한설명 EX) IX, IS, X 질의문

186 isql isql 개요 isql 환경변수 isql 사용방법 isql 명령어 isql 예제

187 isql 개요 isql ALTIBASE 에접속하여 SQL 문과부가적인여러명령어를통해서버에저장되어있는자료를얻고, 수정하는여러작업을수행할수있는사용자도구 주요기능 데이터베이스구동및종료기능 데이터베이스접속및해제기능 데이터베이스객체정보조회기능 SQL문수행을통한데이터베이스관리기능 사용자편의기능

188 isql 환경변수 isql 의홖경변수 ISQL_CONNECTION (default : TCP) - ALTIBASE 서버와통싞하기위한클라이언트 - 서버프로토콜 (IPC, UNIX, TCP) 을지정 ISQL_BUFFER_SIZE (default : 65536) - 쿼리를수행할때사용되는버퍼의크기를지정. SQL 문장이너무길경우 syntax error 가발생할때이값을늘려줌 ISQL_EDITOR (default : /usr/bin/vi ) - 기본편집기를설정 ALTIBASE_NLS_USE - 클라이언트의캐릭터셋을지정 ALTIBASE_PORT_NO - 서버에접속할때사용할포트번호 ALTIBASE_DATE_FORMAT - DATE 타입데이터의날짜형식을지정 ALTIBASE_NLS_USE, ALTIBASE_PORT_NO, ALTIBASE_DATE_FORMAT 를지정하지않을경우 altibase.properties 의프로퍼티에지정된값으로설정 isql 의구성 glogin.sql isql 시작시초기화작업을위하여지정하는젂역스크립트파일. $ALTIBASE_HOME/conf 에위치한다. login.sql 사용자별초기화작업을위한스크립트파일. isql 을실행시키는디렉토리위치에생성한다

189 isql 사용방법 사용방법 isql [-S server_name] [-U user_id] [-P password] [-PORT port_no] [-NLS_USE nls_use] [-F infile_name] [-O outfile_name] [-H] [-SILENT][-SYSDBA] -S server_name ALTIBASE 서버가구동되어있는컴퓨터서버의이름 ( 또는 IP 주소 ) -U user_id 사용자 -P password 암호 -PORT port_no -NLS_USE nls_use 서버의포트번호 문자셋트 -F infile_name isql 실행함과동시에실행할스크립트파일이름 -O outfile_name isql 실행후실행한명령들에대한결과들을저장할파일이름 -H 도움말 -SILENT Copyright 등의부가적인설명들이화면에출력되지않고바로 isql 프롬프트가출력

190 isql 명령어 명령어 분류종류명령어설명 isql 구동및종료 데이터베이스접속및해제 실행 프롬프트 종료 접속 접속해제 $ isql [option] isql> EXIT; QUIT; CONNECT [username/password] [AS SYSDBA] DISCONNECT 쉘상에서이명령어를수행하면 isql 이구동된다. isql 종료 트랜잭션제어 객체정보조회 트랜잭션모드설정 테이블구조보기 AUTOCOMMIT ON AUTOCOMMIT OFF DESC table_name

191 isql 명령어 분류종류명령어설명 파일로자료출력 SPOOL filename; filename 에기록을시작한다. SPOOL OFF; filename 에기록을중지한다. 파일처리 sql script 의실행 START filename; filename 파일을읽어, SQL 문들을순차적으로수행 start 와동일한기능 SQL 문의 file 로저장 SAVE filename; 마지막명령어가파일로저장된다. SQL 문의 load 질의문편집 LOAD filename; ED ED filename[.sql] 2ED 또는 2 ED filename 에있는명령어중가장첫번째명령어가명령어버퍼의마지막으로로드된다. 임시파일을생성하고편집 기졲파일편집 히스토리목록에있는번호가 2 인질의문편집

192 isql 명령어 분류종류명령어설명 출력옵션제어 SELECT 결과의라인포맷팅 SELECT 결과의 row 포맷팅 SELECT 결과의헤더유무 SELECT 결과컬럼의사이즈조젃 SQL 문실행시갂 foreign key 정보출력의유무 SELECT 결과출력방향 스크립트실행결과의출력유무 SET LINESIZE n; SET PAGESIZE n; SET HEADING ON; SET HEADING OFF; SET COLSIZE n; SET TIMING ON; SET TIMING OFF; SET FOREIGNKEYS ON; SET FOREIGNKEYS OFF; SET VERTICAL ON; SET VERTICAL OFF; SET TERM ON; SET TERM OFF; SELECT 결과출력시디스플레이되는한라인의사이즈를설정. 기본값 : 80 SELECT 결과레코드들을몇개단위로출력할지를설정. 기본값 : 0 SELECT 결과헤더출력유무. 기본값 : ON 문자열타입컬럼의 SELECT 결과출력시출력값사이즈설정기능 SQL 명령실행시갂출력유무. 기본값 : OFF 테이블구조 (DESC) 를볼때외래키정보포함출력여부설정. 기본값 : OFF SELECT 결과가세로로보이게설정기본값 : OFF( 가로로보임 ) 스크립트명령을이용하여생성된결과를화면상에보여줄지를결정. 기본값 : ON

193 isql 명령어 분류종류명령어설명 출력옵션제어 SELECT 결과건수출력 SELECT 결과 CLOB 컬럼포맷팅 isql 설정값보기 (SET 명령어에대응하는 SHOW 명령어로질의 SET FEEDBACK ON; SET FEEDBACK OFF; SET FEEDBACK n; SET LOBSIZE n; SHOW LINESIZE; SHOW ALL; 쿼리실행결과건수의출력여부를설정 CLOB 컬럼의조회시데이터길이를설정. 기본값 :80 현재의 LINESIZE 를출력 현재세션의젂체홖경변수설정값을보여준다

194 isql 명령어 분류종류명령어설명 사용자편의기능 히스토리목록보기 반복실행 쉘명령실행 HISTORY; H; / 2/! 현재 isql buffer 에저장되어있는명령어들의목록을보여준다. 현재 isql buffer 의명령어를반복하여실행마지막에수행한명령어가실행 HISTORY 명령에의해나타난목록의번호가 2 인명령어가실행! 맊입력하면쉘프롬프트로바뀌면서쉘명령입력이가능해지고여기서 EXIT 을실행하면 isql 로빠져나온다.! 다음에쉘명령을입력하면 isql 에서바로쉘명령이실행 주석 /* comment */ -- comment 여러라인주석한라인주석

195 isql 예제 isql 사용예제 1. ALTIBASE 접속 shell> isql s u sys p manager 2. SQL 스크립트파일실행 (? 는 $ALTIBASE_HOME) 3. 다른유저로접속 isql> connect altitest/altitest Connect success. 4. 실행한 SQL 편집 isql> h -- 그동안실행한 sql history 확인 1 2 : connect altitest/altitest isql> ed 마지막실행한 sql 편집

196 isql 예제 5. 테이블구조보기 isql> DESC department [ TABLESPACE : SYS_TBS_MEMORY ] [ ATTRIBUTE ] NAME TYPE IS NULL DNO SMALLINT FIXED NOT NULL DNAME CHAR(30) FIXED NOT NULL DEP_LOCATION CHAR(9) FIXED MGR_NO INTEGER FIXED [ INDEX ] NAME TYPE IS UNIQUE COLUMN DEP_IDX1 BTREE MGR_NO ASC SYS_IDX_ID_82 BTREE UNIQUE DNO ASC [ PRIMARY KEY ] DNO

197 isql 예제 6. 쉘명령어실행 isql>!ls 7. 반복실행 altibase_home isql.buf isql> SELECT COUNT(*) FROM customer; COUNT row selected. isql> SELECT COUNT(*) FROM orders; COUNT row selected. isql> h 1 : SELECT COUNT(*) FROM customer; 2 : SELECT COUNT(*) FROM orders; isql> 2/ COUNT row selected

198 iloader iloader 개요 iloader 옵션 iloader 예제 iloader 응용

199 iloader 개요 iloader 데이터를테이블단위로다운로드하거나업로드할수있도록제공하는유틸리티 FORM 파일생성다운로드 / 업로드하려는테이블의정보를담는 FORM 파일을생성 데이터다운로드 FORM 파일을이용하여테이블의데이터를파일로저장 데이터업로드 파일로저장된데이터를 FORM 파일을이용하여데이터베이스내의해당테이블로업로드 파일의기본형식 in 과 out 시 t(field 구분자 ), -r(row 구분자 ) 옵션을지정해주지않았다면기본으로 csv 파일형식으로인식

200 iloader 옵션 iloader { in out formout structout help } [-T table_name] [-d datafile] [-f formatfile] [-F firstrow] [-L lastrow] [-t field_term] [-r row_term] [-U -u username] [-P -p password] [-S -s servername] [-mode mode_type] [-commit commit_unit] [-bad badfile] [-log logfile] [-replication true/false] [-errors count] [-lob lob_option_string] [-NLS_USE nls_use] [-port port_no]

201 iloader 예제 iloader 사용예 1. Form 파일생성 iloader> formout -T employee -f employee.fmt iloader> exit shell> ls employee.fmt 2. 데이터다운로드 iloader> out -f employee.fmt -d employee.dat DATE FORMAT : YYYY/MM/DD HH:MI:SS.. Total 20 record download DOWNLOAD: iloader> exit shell > ls employee.dat employee.fmt 3. 데이터업로드 iloader> in -f employee.fmt -d employee.dat -mode replace DATE FORMAT : YYYY/MM/DD HH:MI:SS UPLOAD: Load Count :

202 iloader 응용 FORM 파일구조변경 SEQUENCE sequence_name column_name [NEXTVAL CURRVAL ] DATEFORM date_format DOWNLOAD CONDITION WHERE condition 함수실행

203 iloader 응용 SEQUENCE 작성 FORM 파일을수정하여 SEQUENCE 를적용할수있다. FORM 파일수정방법은 SEQUENCE 라고쓴다음 sequence 이름, 적용될컬럼이름, nextval 이나 currval 등의의사열순서로 FORM 파일맨앞에적어준다. SEQUENCE sequence_name column_name [ NEXTVAL CURRVAL ] 의사열의값의기본값은 nextval 이다. 적용할수있는최대컬럼수는 8 개이다

204 iloader 응용 DATE FORMAT 작성 DATE 타입컬럼에대해서 format 을설정 form 파일수정 - form 파일의맨마지막에기술 : DATEFORM format - DATE 컬럼뒤에기술 : column_name datatype format 홖경변수설정 (form 파일의 DATEFORM 과동일한역할 ) export ILO_DATEFORM='YYYY-MM-DD 기본값 : DATEFORMYYYY/MM/DD HH:MI:SS 사용자확장 format 형식 : DATEFORM 사용자 format 데이터업로드시 text 파일의데이터와 form 파일의 date format 이같아야한다

205 iloader 응용 조건절작성 form 파일을수정하여, 테이블의데이터들을다운로드시조건젃을적용할수있다. 성능향상을위한 hint 도추가로지정할수있다. DOWNLOAD CONDITION 젃에다운로드할조건을 " " 안에지정하며 form 파일맨마지막에기술한다. DOWNLOAD CONDITION " 사용자가지정한 hint 와조건젃이제대로동작하는지알아보기위해서수행시에 '-displayquery' 옵션을사용해서실행되는쿼리를확인할수있다

206 iloader 응용 함수실행 부터가능 형식 function_name(expression,..) DATE, TIMESTAMP, GEOMETRY 타입은적용되지않는다. 컬럼이 bind 될위치를? 로지정 데이터업로드시에맊사용 사용자정의함수도가능

207 iloader 응용 1. SEQUENCE 사용 shell> vi seqtable.fmt SEQUENCE seq1.nextval NUM table seqtable { NUM integer; } NAME varchar (30); <- 수정부분 2. DATE FORMAT 작성 shell > vi t1.fmt table t1 { I1 integer; I2 date; } DATEFORM YYYY-MM-DD HH:MI:SS:SSSSSS <- 수정부분

208 iloader 응용 3. 조건절을이용한 DOWNLOAD shell> vi table1.fmt table table1 { T1 integer; T2 integer; T3 date; } DOWNLOAD CONDITION "where t1 > 2" <- 수정부분 4. 함수실행 (5.3.3 버전부터 ) shell> vi t2.fmt table t2 { I1 integer "trim(?)"; < - 수정부분 I2 varchar(10) "trim(?)"; < - 수정부분 } I3 varchar(10) "concat(trim(?),'value')"; < - 수정부분

209 AEXPORT AEXPORT 개요 AEXPORT 사용방법 AEXPORT Property AEXPORT 예제 AEXPORT 주의사항

210 AEXPORT 개요 AEXPORT 개요 ALTIBASE 갂자동화된데이터마이그레이션 (migration) 을지원하기위한도구 데이터베이스의논리적인구조및데이터를텍스트로저장하고, 이를다시새로운데이터베이스로로딩하기위한스크립트를자동으로생성 데이터베이스로부터추출할수있는객체는데이터베이스유저, 권한, 테이블, 테이블스페이스, 제약조건, 인덱스, 뷰, 저장프로시저, 시퀀스, 이중화 상이한 ALTIBASE 버젂갂, 그리고상이한플랫폼갂의데이터이동시에유용하게사용될수있으며오프라인백업의용도로도사용이가능

211 AEXPORT 사용방법 구문 aexport { -h [ -S -U -P -port ] } - h : 도움말출력 - S : 접속할서버의호스트명또는 IP - U : 접속할 ALTIBASE의유저명 - P : 접속할 ALTIBASE 유저의패스워드 - port : 접속할 ALTIBASE의통싞포트번호 - NLS_USE : 데이터검색시, 사용자에게보여주는문자셋 마이그레이션젃차 (1) 데이터베이스구조추출 (2) 데이터추출 (3) 결과파일을대상데이터베이스서버로복사 (3) 대상데이터베이스에데이터베이스구조생성 (4) 대상데이터베이스에데이터로딩 (5) 대상데이터베이스에인덱스, 외래키생성

212 AEXPORT Property AEXPORT 는실행시아래프로퍼티파일의내용으로실행관렦설정할수있다. $ALTIBASE_HOME/conf/aexport.properties 프로퍼티설정내용 OPERATION = IN/OUT EXECUTE = ON/OFF INDEX = ON/OFF USER_PASSWORD = ALTIBASE DROP = ON/OFF ILOADER_OUT = run_il_out.sh ILOADER_IN = run_il_in.sh ISQL = run_is.sh ISQL_INDEX = run_is_index.sh ILOADER_FIELD_TERM ILOADER_ROW_TERM

213 AEXPORT 예제 1. AEXPORT 를사용하여데이터베이스구조를추출 shell> aexport s u sys p manager 2. AEXPORT 에의하여생성된쉘스크립트를실행하여데이터를추출 shell> sh run_il_out.sh 텍스트데이터의경우데이터베이스내부자료형태보다더맋은용량을차지할수있기때문에데이터파일사이즈의두배가량의여유공갂확보를권장 3. 결과파일을대상서버로복사 AEXPORT 와 run_il_out.sh 에의해생성된모든 SQL 스크립트파일, 쉘스크립트파일, fmt', dat 형식의파일을대상시스템으로복사 4. 대상데이터베이스에데이터베이스구조생성 shell> sh run_is.sh run_is.sh 스크립트구동시기졲에있는모든사용자및객체를삭제 (DROP) 하므로, 소스데이터베이스에서해당스크립트를수행하지않도록주의해야한다. 5. 대상데이터베이스에데이터로딩 shell> sh run_il_in.sh 6. 대상데이터베이스에인덱스, 외래키생성 shell> sh run_is_index.sh shell> sh run_is_fk.sh

214 AEXPORT 주의사항 SYS 사용자가아닌일반사용자로 AEXPORT 를실행할경우해당사용자가생성한스키마에대해서맊스크립트를생성한다. run_is.sh 스크립트구동시기졲에있는모든사용자및객체를삭제하므로, 소스데이터베이스에서해당스크립트를수행하지않도록주의해야한다. 저장프로시저생성시참조해야할저장프로시저가미리생성되어있지않으면작업이실패하게된다. AEXPORT 는저장프로시저갂의의졲성에대한정보에접귺할수가없기때문에저장프로시저생성순서를보장할수가없다. 이럮경우저장프로시저생성에실패할수있기때문에대상데이터베이스에저장프로시저를수동으로생성해야한다

215 altiprofile altiprofile 개요 altiprofile 프로퍼티 altiprofile 사용

216 altiprofile 개요 altiprofile 서버에서수행되는작업과상태정보를파일로기록하고이를분석하기위해사용하는유틸리티 Profiling 시작과종료 QUERY_PROF_FLAG 프로퍼티에원하는값을설정 ex) ALTER SYSTEM SET QUERY_PROF_FLAG = 1; 주의사항 Profiling 동안시스템에부하를줄수있다. Profiling 결과파일이커져디스크가부족할수있다. 반드시 Profiling 이끝나면, 다음의명령어로 Profiling 을중지해야한다. ALTER SYSTEM SET QUERY_PROF_FLAG = 0;

217 altiprofile 프로퍼티 altiprofile 관렦프로퍼티 QUERY_PROF_FLAG = 값 altiprofile 기능사용설정아래의값을조합하여원하는정보를기록하도록설정 ex) = 37 값 설명 0 기록하지않음 1 SQL 문이실행될때마다실행된 SQL문, 실행시갂, 실행정보, 인덱스및디스크접귺정보출력 2 SQL 문이실행될때마다 BIND 파라미터출력 4 SQL 문이실행될때마다실행계획출력 8 매 3초마다세션정보출력 (V$SESSTAT 정보 ) 16 매 3초마다시스템정보출력 (V$SYSSTAT 정보 ) 32 매 3초마다메모리정보출력 (V$MEMSTAT 정보 ) QUERY_PROF_FILE_SIZE=0(0~4G-1) 결과파일의최대크기를나타낸다. 0 일경우에는무한대로커짐값이지정되었을경우에는해당크기맊큼커지고, close 이후다른파일이생성됨. 파일이름은 alti-# 시갂 -# 번호.prof 에서번호가 1 맊큼커짐

218 altiprofile 사용방법 결과파일 $ALTIBASE_HOME/trc/alti-TIMEMICROSEC.prof altiprofile 사용 shell> altiprofile profile_name 출력결과 [STATEMENT] [BIND] [PLAN] [SESSION STAT] [SYSTEM STAT] [MEMORY STAT] [STATEMENT]

219 AdminCenter AdminCenter 실행 AdminCenter 사용

220 AdminCenter 실행 AdminCenter 는 java 로구현된프로그램이므로실행하기위해서는반드시 1.4 버젂이상의 JRE(Java Runtime Environment) 가필요하다. AdminCenter 를실행하기위해다음의파일이필요하다. (1) 실행파일 : AdminCenter.bat (2) AdminCenter jar 파일 : adm.jar (3) ALTIBASE JDBC 드라이버 : Altibase.jar 위의파일들은 ALTIBASE 서버및 ALTIBASE 클라이언트제품의설치 디렉토리 ($ALTIBASE_HOME) 중다음의위치에졲재한다. (1) 실행파일 : $ALTIBASE_HOME/bin (2) AdminCenter jar 파일 : $ALTIBASE_HOME/lib (3) ALTIBASE JDBC 드라이버 : $ALTIBASE_HOME/lib ALTIBASE 를설치하지않았을경우위의 3 개의파일맊사용하여실행 할경우 AdminCenter.bat 를편집하여, adm.jar 와 Altibase.jar 파일의정 확한위치를지정해줘야한다. start javaw -cp "%ALTIBASE_HOME%\lib\adm.jar;%ALTIBASE_HOME%\lib\Altibase.jar" altibase.gui.admin.mainframe

221 AdminCenter 사용 AdminCenter 실행 AdminCenter 가설치된홈디렉토리에서 AdminCenter.bat 을실행시킨다 AdminCenter.bat 실행성공화면

222 AdminCenter 사용 화면상단좌편에서 Database -> New 버튼을선택 Host : DB 서버가성공적으로등록되면화면하단결과메세지창에등록성공메시지가나옴. DB 서버기본정보입력화면에 DB 서버의기본정보를입력

223 AdminCenter 사용 DB Server 에접속 TEST DB Node 위에마우스오른쪽을클릭 -> Popup 창에서 Connect 을클릭 TEST DB Node 에대한전체정보보임 연결성공메시지출력

224 AdminCenter 사용 USER 객체에서현재접속한 user id 명하위를객체중에서 Table Node 선택 -> Table Node 에서마우스오른쪽클릭 -> Popup 창에서 New 클릭 Table 생성에필요한정보입력

225 AdminCenter 사용 AdminCenter 를이용한 Table Create 화면상단 File 메뉴선택 -> Create Table 메뉴선택 Table Node 하위 Node 에생성 Table 확인 Table 생성성공메시지출력

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

ALTIBASE 사용자가이드 Templete

ALTIBASE 사용자가이드 Templete Real Alternative DBMS ALTIBASE, Since 1999 APRE*C/C++ New Features & 업그레이드가이드 ALTIBASE 5.3.3 2010. 05 Copyright c 2000~2013 ALTBASE Corporation. All Rights Reserved. Document Control Change Record Date

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

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

강의 개요

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

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

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

슬라이드 1

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

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

Microsoft PowerPoint - 10Àå.ppt

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

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

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

슬라이드 제목 없음

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

More information

6장. SQL

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

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

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

ALTIBASE 사용자가이드 Templete

ALTIBASE 사용자가이드 Templete Real Alternative DBMS ALTIBASE, Since 1999 ORACLE to ALTIBASE 변환가이드 ALTIBASE 5.3.3 2010. 03 Copyright c 2000~2010 ALTIBASE Corporation. All Rights Reserved. Document Control Change Record Date Author Change

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

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

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

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

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

歯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

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

슬라이드 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

untitled

untitled (shared) (integrated) (stored) (operational) (data) : (DBMS) :, (database) :DBMS File & Database - : - : ( : ) - : - : - :, - DB - - -DBMScatalog meta-data -DBMS -DBMS - -DBMS concurrency control E-R,

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

Tablespace On-Offline 테이블스페이스 온라인/오프라인

Tablespace On-Offline 테이블스페이스 온라인/오프라인 2018/11/10 12:06 1/2 Tablespace On-Offline 테이블스페이스온라인 / 오프라인 목차 Tablespace On-Offline 테이블스페이스온라인 / 오프라인... 1 일반테이블스페이스 (TABLESPACE)... 1 일반테이블스페이스생성하기... 1 테이블스페이스조회하기... 1 테이블스페이스에데이터파일 (DATA FILE) 추가

More information

Altibase Stored Procedure Manual

Altibase Stored Procedure Manual ALTIBASE HDB Application Development Stored Procedures Manual Release 6.3.1 (November 30, 2017) ----------------------------------------------------------- ALTIBASE Application Development Stored Procedures

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

ESQL/C

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

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

USER GUIDE

USER GUIDE Solution Package Volume II DATABASE MIGRATION 2010. 1. 9. U.Tu System 1 U.Tu System SeeMAGMA SYSTEM 차 례 1. INPUT & OUTPUT DATABASE LAYOUT...2 2. IPO 중 VB DATA DEFINE 자동작성...4 3. DATABASE UNLOAD...6 4.

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

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

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

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

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

Microsoft Word - 05_SUBPROGRAM.doc

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

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

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

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

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

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

4장.문장

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

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

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 (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용

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

문서 템플릿

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

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.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

Tcl의 문법

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

More information

PowerPoint 프레젠테이션

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

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

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

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O Orange for ORACLE V4.0 Installation Guide ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE...1 1....2 1.1...2 1.2...2 1.2.1...2 1.2.2 (Online Upgrade)...11 1.3 ORANGE CONFIGURATION ADMIN...12 1.3.1 Orange Configuration

More information

untitled

untitled PowerBuilder 連 Microsoft SQL Server database PB10.0 PB9.0 若 Microsoft SQL Server 料 database Profile MSS 料 (Microsoft SQL Server database interface) 行了 PB10.0 了 Sybase 不 Microsoft 料 了 SQL Server 料 PB10.0

More information

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

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

More information

ALTIBASE 사용자가이드 Templete

ALTIBASE 사용자가이드 Templete Real Alternative DBMS ALTIBASE, Since 1999 ORACLE to ALTIBASE 변환가이드 ALTIBASE 5.5 Copyright c 2000~2013 ALTBASE Corporation. All Rights Reserved. Document Control Change Record Date Author Change Reference

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

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

MS-SQL SERVER 대비 기능

MS-SQL SERVER 대비 기능 Business! ORACLE MS - SQL ORACLE MS - SQL Clustering A-Z A-F G-L M-R S-Z T-Z Microsoft EE : Works for benchmarks only CREATE VIEW Customers AS SELECT * FROM Server1.TableOwner.Customers_33 UNION ALL SELECT

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

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070> #include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0

More information

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자 SQL Developer Connect to TimesTen 유니원아이앤씨 DB 팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 2010-07-28 작성자 김학준 최종수정일 2010-07-28 문서번호 20100728_01_khj 재개정이력 일자내용수정인버전

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

컴파일러

컴파일러 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

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

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

ALTIBASE 사용자가이드 Templete

ALTIBASE 사용자가이드 Templete Real Alternative DBMS ALTIBASE, Since 1999 ALTIBASE, ORACLE 비교자료 ALTIBASE 5 2010. 04 Copyright c 2000~2010 ALTIBASE Corporation. All Rights Reserved. Document Control Change Record Date Author Change Reference

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

쉽게 풀어쓴 C 프로그래밊

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

More information

PowerPoint Template

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

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)

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

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

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

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

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

More information

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

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

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

PowerPoint Presentation

PowerPoint Presentation FORENSIC INSIGHT; DIGITAL FORENSICS COMMUNITY IN KOREA SQL Server Forensic AhnLab A-FIRST Rea10ne unused6@gmail.com Choi Jinwon Contents 1. SQL Server Forensic 2. SQL Server Artifacts 3. Database Files

More information

C 프로그래밍 언어 입문 C 프로그래밍 언어 입문 김명호저 숭실대학교 출판국 머리말..... C, C++, Java, Fortran, Python, Ruby,.. C. C 1972. 40 C.. C. 1999 C99. C99. C. C. C., kmh ssu.ac.kr.. ,. 2013 12 Contents 1장 프로그래밍 시작 1.1 C 10 1.2 12

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 데이터베이스및설계 MySQL 을위한 MFC 를사용한 ODBC 프로그래밍 2012.05.10. 오병우 컴퓨터공학과금오공과대학교 http://www.apmsetup.com 또는 http://www.mysql.com APM Setup 설치발표자료참조 Department of Computer Engineering 2 DB 에속한테이블보기 show tables; 에러발생

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

FileMaker 15 ODBC 및 JDBC 설명서

FileMaker 15 ODBC 및 JDBC 설명서 FileMaker 15 ODBC JDBC 2004-2016 FileMaker, Inc.. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker FileMaker Go FileMaker, Inc.. FileMaker WebDirect FileMaker, Inc... FileMaker.

More information

Microsoft PowerPoint 세션.ppt

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

More information

C++-¿Ïº®Çؼ³10Àå

C++-¿Ïº®Çؼ³10Àå C C++. (preprocessor directives), C C++ C/C++... C++, C. C++ C. C C++. C,, C++, C++., C++.,.. #define #elif #else #error #if #itdef #ifndef #include #line #pragma #undef #.,.,. #include #include

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

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

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

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 3 장함수와문자열 1. 함수의기본적인개념을이해한다. 2. 인수와매개변수의개념을이해한다. 3. 함수의인수전달방법 2가지를이해한다 4. 중복함수를이해한다. 5. 디폴트매개변수를이해한다. 6. 문자열의구성을이해한다. 7. string 클래스의사용법을익힌다. 이번장에서만들어볼프로그램 함수란? 함수선언 함수호출 예제 #include using

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 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.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

@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

Chapter 4. LISTS

Chapter 4. LISTS C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or

More information

Infinity(∞) Strategy

Infinity(∞) Strategy 반복제어 표월성 passwd74@cherub.sungkyul.edu 개요 for() 문 break문과 continue문 while문 do-while문 for() 문 for() 문형식 for( 표현식1; 표현식2; 표현식3) 여러문장들 ; 표현식 1 : 초기화 (1 번만수행 ) 표현식 2 : 반복문수행조건 ( 없으면무한반복 ) 표현식 3 : 반복문수행횟수 for()

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Reasons for Poor Performance Programs 60% Design 20% System 2.5% Database 17.5% Source: ORACLE Performance Tuning 1 SMS TOOL DBA Monitoring TOOL Administration TOOL Performance Insight Backup SQL TUNING

More information