전체 글 137

[PL/SQL]컬렉션 사용의 기초

컬렉션 사용의 기초 연관배열(INDEX BY 테이블)이란- Primary Key(정수 or 문자열)와 scalar 또는 record 타입의 데이터가 있는 PL/SQL 컬렉션 다음과 같은 구문으로 연관배열을 생성한다.1234567TYPE type_name IS TABLE OF {column_type | variable%TYPE | table.column%TYPE} [NOT NULL] | table%ROWTYPE | INDEX BY PLS_INTEGER | BINARY_INTEGER | VARCHAR2();identifier type_name;cs 구문 설명 type_name 테이블 유형의 이름 column_type VARCHAR2, DATE, VARCHAR, NUMBER 또는 % TYPE과 같은 스칼라 또..

[PL/SQL]코드 설계 고려 사항 기초

코드 설계 고려 사항 기초 상수 및 예외 표준화- Package Spec으로 구현- 장점 - 일관성 - 재사용 증가 - 유지관리 간편 - 회사 표준 구현- 대상 - 예외 이름 - 상수 정의 로컬 서브 프로그램- 서브 프로그램의 선언 섹션 끝에 정의된 프로시져 또는 함수 정의자 권한- 생성자의 권한으로 프로그램 실행- 프로시저 실행 권한만 필요- 작업을 진행 했다면 하나의 프로시져에서 테이블을 delete할 수 있는 명령어를 썼다면 DELETE TABLE으로 해야하는데 이때 TABLE은 user이름을 생략하면 자신의 TABLE로 처 리 한다. 호출자권한- 호출자의 권한으로 프로그램 실행- 프로시저에 액세스하는 기본객체에 대한 권한필요.- 이경우에서 위와 같은 작업을 진행하면 사용되는 이름은 호출자의 스키마..

[PL/SQL]동적 SQL의 기초

동적 SQL의 기초 실행계획다음의 세 구문은 결과가 같다.12345678SELECT * FROM EMP WHERE DEPTNO = 10; SELECT * FROM EMP WHERE DEPTNO = 10; SELECT * FROM EMPWHERE DEPTNO = 10;cs하지만 이 구문은 같다고 할 수있을까? 엄밀히 말하면 같다고 말할 수 없다.12SELECT * FROM V$SQLWHERE SQL_TEXT LIKE 'SELECT * FROM EMP %';cs이 구문을 사용하면, SQL_ID를 알 수 있고 이것을 이용해서 123SELECT *FROM V$SQL_PLANWHERE SQL_ID = '8xnv6u5p3pxjf';cs를 이용하면, 실행 계획을 볼 수 있다. 맨위의 세 구문은 각각의 SQL_ID가 ..

[PL/SQL]패키지 작업의 기초

패키지 작업의 기초 서브 프로그램 오버로드- 동일한 이름의 서브 프로그램을 두 개 이상 생성하는 것을 말한다.- 이러한 서브 프로그램들은 서로 형식 파라미터의 개수와 순서, 데이터 타입이 달라야한다. 프로시저의 잘못된 참조블록 구조는 식별자를 참조하기 전에 선언해야함.다음 예시를 보자123456789101112CREATE OR REPLACE PACKAGE BODY TESTTEST IS PROCEDURE TEST1 IS BEGIN TEST2 ; END TEST1 ; PROCEDURE TEST2 IS BEGIN NULL ; END TEST2 ;END TESTTEST ;/Colored by Color Scriptercs이경우 사전 선언이 잘못도되어 있으므로 4번째 라인의 TEST2에서 에러가 발생한다.이럴경우..

[PL/SQL]예외처리의 기초

예외처리의 기초 예시를 먼저 보도록 하자. 시작하기 앞서, 테이블에 제약조건을 추가하자.12ALTER TABLE empADD CONSTRAINT emp_ck CHECK ( sal > 0 ) ;cs 제약조건 때문에 다음의 구문은 ERROR가 발생한다.123UPDATE empSET sal = 0WHERE empno = 7934 ;cs 다음의 PL/SQL 블록은 비정상 종료가 이뤄진다.1234567891011BEGIN UPDATE emp SET sal = 3000 WHERE empno = 7782 ; UPDATE emp SET sal = 0 WHERE empno = 7934 ;END ;/--블록 내에서 ERROR 발생시 블록 전체가 ROLLBACK된다.(비정상 종료)cs 하지만 다음과 같이 예외처리를 해주면1..

[PL/SQL]명시적 커서 기초

명시적 커서 기초 ###내용 보충 필요 다음의 예시는 결과가 전부 같다. 일반적인 커서1234567891011121314151617181920212223DECLARE CURSOR CUR_DEPT IS SELECT DEPTNO, DNAME, LOC, 0 AS SUM_SAL FROM DEPT ; REC_DEPT CUR_DEPT%ROWTYPE ; BEGIN OPEN CUR_DEPT; LOOP FETCH CUR_DEPT INTO REC_DEPT; EXIT WHEN CUR_DEPT%NOTFOUND; SELECT SUM(SAL) INTO REC_DEPT.SUM_SAL FROM EMP WHERE DEPTNO = REC_DEPT.DEPTNO; INSERT INTO COPY_DEPT VALUES REC_DEPT ; EN..

[PL/SQL]조합 데이터 유형 작업 기초

조합 데이터 유형 작업 기초 레코드를 생성하는 구문은 다음과 같다.12TYPE type_name IS RECORD (field_declaration[, field_declaration]…);cs 1identifier type_name;cs 블록에서 모든 컬럼을 가져올때 다음과 같은 방법으로 사용한다.12DECLAREidentifier reference%ROWTYPE;cs 12345678DECLARE rec_emp emp%rowtype;BEGIN SELECT * INTO rec_emp FROM emp WHERE empno = 7788;END;cs 하지만 많은 컬럼을 가지고있는 테이블에서 여러개의 컬럼을 가져올경우 다음과 같은 방법을 사용한다.1234567891011121314151617DECLARE TYP..

[PL/SQL]제어구조문의 기초

제어구조문의 기초 IF 문기본적인 구문은1234567IF condition THEN statements;[ELSIF condition THEN statements;][ELSE statements;]END IF;cs으로 작성한다. 아마 프로그래밍을 조금이라도 경험한 사람이라면 이 형식은 굉장히 익숙하게 느껴질 것이다. 구문 설명 condition T,F,NULL을 반환하는 변수 또는 표현식 THEN 부울표현식을 뒤의 명령문 시퀀스와 연관시키는 절을 시작 statements 조건이 TRUE인 경우 실행되는 문장 CASE 식기본적인 구문은1234567CASE selector WHEN expression1 THEN result1 WHEN expression2 THEN result2 ... WHEN express..

[PL/SQL]PL/SQL 내의 SQL문의 기초

PL/SQL 내의 SQL문의 기초 기본적으로 PL/SQL에서는 다음과 같은 명령어가 사용가능하다.123456BEGIN SELECT INSERT, UPDATE, DELETE, MERGE COMMIT, ROLLBACK, SAVEPOINTEND;/cs다른 구문도 사용 가능하나, 이경우에는 다른 명령어가 추가 되므로, 다음에 알아보도록 하자. SELECT문SELECT의 경우 반드시 INTO로 Return을 해야하는 변수가 존재해야 한다.즉 반드시 INTO절을 가져야 한다.또한 PL/SQL안의 SELECT문은 반드시 하나의 행만 검색되어야한다. 구문은 다음과 같이 작성한다.12345SELECT select_listINTO {variable_name[, variable_name]...| record_name}FRO..

[SQL]SQL 문장 처리 과정

SQL 문장 처리 과정 1. Parse : 구문 분석 - 실행 계획 확보2. Bind : 바인드 변수에 값 할당 (바인드 변수가 없다면 건너뛴다.)3. Execute : 실행4. Fetch : 행 인출 (SELECT 만 해당 됨)->검색한 결과를 다시 PL/SQL문으로 return해줌 바인드 변수가 없고 SELECT가 없으면 Parse와 Fetch만 실행된다. SQL을 배운지 얼마 되지 않아 잘못된 내용이 있을 수 있습니다. 틀린 내용이있다면, 댓글로 달아주세요.