PL SQL 24

PL/SQL 반복문 (Basic LOOP, WHILE LOOP, FOR LOOP, 중첩 루프 및 레이블)

[반복문] - Basic Loop : LOOP와 END LOOP 키워드 사이의 LOOP 블록을 계속 수행한다. 도중에 EXIST WHEN 절이 만족되면 LOOP를 탈출한다. LOOP statement1; . . . EXIT [WHEN condition]; END LOOP; - While Loop : 일반적인 WHILE Loop와 유사하다. WHILE condition LOOP statement1; statement2; . . . END LOOP; - For Loop : lower_bound..upper_bound이므로, lower_bound가 upper_bound 보다 큰 경우 FOR 루프를 진입하지 않는다. 따라서 REVERSE 키워드를 넣으면 반대로 counter가 내려간다. 루프 안에 카운터만 참조..

PL SQL 2016.07.07

PL/SQL 제어문 (IF, CASE)

[제어문] - IF: 알반적인 프로그래밍에서 사용되는 IF문을 PL/SQL에서도 사용할 수 있다. IF, THEN, ELSIF, THEN, ELSE, END IF임에 유의한다. DECLARE v_myage NUMBER := 41 ; BEGIN IF v_myage < 11 THEN DBMS_OUTPUT.PUT_LINE(' I am a child '); ELSIF v_myage < 20 THEN DBMS_OUTPUT.PUT_LINE(' I am young '); ELSIF v_myage < 30 THEN DBMS_OUTPUT.PUT_LINE(' I am in my twenties'); ELSIF v_myage < 40 THEN DBMS_OUTPUT.PUT_LINE(' I am in my thirties');..

PL SQL 2016.07.07

PL/SQL 개관 - 3 (SELECT문)

[PL/SQL과 SQL] - PL/SQL에서 사용 가능한 SQL 1) Query, DML, TCL은 사용 가능하다. 2) DDL (CREATE, DROP, ALTER, TRUNCATE …), DCL (GRANT, REVOKE) 명령어는 동적 SQL을 이용할 때만 사용 가능하다. - PL/SQL의 SELECT문 1) 내용 : PL/SQL의 SELECT문은 해당 SELECT의 결과를 PL/SQL Engine으로 보낸다. 이를 캐치하기 위한 변수를 DECLARE해야 하고, INTO절을 꼭 선언하여 넣을 변수를 꼭 표현해주어야 한다. 2) 예제 DECLARE v_ename VARCHAR2(10) ; v_sal emp.sal%TYPE ; BEGIN SELECT ename, sal INTO v_ename, v_sa..

PL SQL 2016.07.07

PL/SQL 개관 - 2 (중첩 블록 및 PL/SQL에서 사용 가능한 SQL)

- 중첩 블록 1) 내용 : BEGIN과 END는 중첩적으로 사용할 수 있다. 다만, 위에서 아래의 방향으로 순서대로 진행하면서 데이터 영역을 확보하기 때문에 변수의 사용 가능 유무를 잘 생각해야 한다. 또한 내부 블록에서는 외부 블록의 변수를 사용할 수 있으나, 반대의 경우는 그럴 수 없다. 그리고 지정자가 중복되는 경우 Outer의 레이블을 달아서 Ambiguous Call을 해결할 수 있다 BEGIN DECLARE v_father_name VARCHAR2(20):='Patrick'; v_date_of_birth DATE := TO_DATE('1972/04/20','YYYY/MM/DD') ; BEGIN DECLARE v_child_name VARCHAR2(20):='Mike'; v_date_of_bi..

PL SQL 2016.07.07

PL/SQL 개관 - 1 (정의, 특징, 장점, Block의 종류)

[PL/SQL 개관] - 정의 SQL을 확장한 절차적 언어(Procedural Language)이다. 관계형 데이터베이스에서 사용되는 Oracle의 표준 데이터 엑세스 언어로, 프로시저 생성자를 SQL과 완벽하게 통합한다. 유저 프로세스가 PL/SQL 블록을 보내면, 서버 프로세서는 PL/SQL Engine에서 해당 블록을 받고 SQL과 Procedural를 나눠서 SQL은 SQL Statement Executer로 보낸다. - 특징 PL/SQL은 다음 SQL의 단점들을 개선해준다. 1) 변수가 없다. 2) 단문 형식이다. (한번에 하나의 명령문만 사용 가능 => 트래픽 증가) 3) 제어문이 없다. (IF, LOOP) 4) 예외처리가 없다. 또한 블록 단위의 실행을 제공한다. 이를 위해 BEGIN과 EN..

PL SQL 2016.07.07

PL/SQL 패키지 (Package) - 3 (패키지 작성 지침, 오버로드, 지속 상태, 상수 및 예외 표준화)

- 패키지 작성 지침 1) Spec은 Body 앞에 정의한다. 2) Spec은 공용 생성자만 포함해야 한다. 3) 세션이나 트랜잭션 전체에서 유지 관리해야 할 경우 Body 선언 부분에 해당 항목을 배치한다. 4) Spec이 변경될 때 참조 서브 프로그램을 재 컴파일 할 필요성을 줄인다. 5) Spec은 생성자를 가능한 한 적게 포함해야 한다. - PL/SQL 서브 프로그램 오버로드 동일한 이름의 서브 프로그램을 두 개 이상 생성할 수 있다. 다만 파라미터가 달라야 한다. 또한 독립 형 서브 프로그램은 오버로드를 하지 않는다. - Package의 지속 상태 1) 패키지가 처음으로 적재될 때 초기화 된다. 2) 세션 기간 동안 지속된다. 3) UGA(User Global Area)에 저장되고, 세션마다 고..

PL SQL 2016.07.07

PL/SQL 패키지 (Package) - 2 (Spec, Body 생성 방법)

- 생성 방법 1) CREATE PACKAGE Package Spec에 선언된 변수는 기본적으로 NULL로 초기화된다. Spec에 있는 변수는 Body이 정의되어 있지 않아도 접근 가능하다. 아래 예제에서 공용 변수와 커서는 지속되므로, 계속 그 값이 유지된다. 다만 세션 별로 관리 되기 때문에(PGA에서) 다른 세션에서는 별도로 다른 값을 갖는다. CREATE [OR REPLACE] PACKAGE package_name IS|AS public type and variable declarations subprogram specifications END [package_name]; Package Spec 예제 CREATE OR REPLACE PACKAGE comm_pkg IS v_std_comm NUMBE..

PL SQL 2016.07.07

PL/SQL 패키지 (Package) - 1 (정의, 이점)

[패키지] - 정의 패키지는 논리적으로 연관된 여러 서브 프로그램들을 그룹화하는 스키마 객체를 의미한다. 패키지는 Spec, Body 두 부분으로 구성된다. 1) Spec 패키지의 인터페이스이다. 패키지 외부에서 참조할 수 있는 유형, 변수, 상수, 예외, 커서 및 서브 프로그램을 선언한다. 2) Body 페키지의 로직 처리 부분이다. 커서에 대한 Query와 서브 프로그램에 대한 코드를 정의한다. - 패키지 사용 시 이점 1) 정보 은닉화 : Package Spec에 있는 선언만 응용 프로그램에서 볼 수 있고 접근할 수 있다. Body의 전용 생성자는 표시되지 않으며 접근할 수 없다. 2) 공용 변수 및 커서의 지속성 : 메모리에는 모든 유저에 대한 한 개의 복사 3) 모듈화 : 관련 생성자를 캡슐화한..

PL SQL 2016.07.07

PL/SQL 함수(Function) - 2 (표현식의 일부로 사용되는 함수, SQL문장 함수 사용 제한 사항)

- 표현식의 일부로 사용되는 함수 함수는 위에서 보았듯이 표현식의 일부로 사용된다. 즉, 프로시저와 같이 직접 EXECUTE할 수 없는 것이다. 이 이유는 함수는 값을 반환하기 때문이다. 반대로, 프로시저는 표현식의 일부(SELECT 프로시저와 같이)로 사용할 수 없다. CREATE OR REPLACE FUNCTION get_sal( p_id employees.employee_id%TYPE) RETURN NUMBER IS v_sal employees.salary%TYPE := 0; BEGIN SELECT salary INTO v_sal FROM employees WHERE employee_id = p_id; RETURN v_sal; END get_sal; / -- Error : 'PLS-00221: 'G..

PL SQL 2016.07.07

PL/SQL 함수(Function) - 1 (함수 생성, 프로시서 함수의 차이, Syntax)

[함수 생성] - 내용 1) 함수란 값을 반환하는 명명된 PL/SQL 블록이다. 2) 반복 실행을 위해 데이터베이스에 스키마 객체로 저장할 수 있다. 3) 표현식의 일부로 사용되거나 또 다른 서브 프로그램에 파라미터 값을 제공하는 데 사용된다. 4) PL/SQL 패키지로 그룹화할 수 있다. 5) PL/SQL 블록에는 적어도 하나의 RETURN 문이 있어야 한다. - 프로시저와 함수의 차이 프로시저 함수 PL/SQL문으로 실행 표현식의 일부로 호출 헤더에 RETURN절이 없음 헤더에 RETURN 절을 포함해야 함 값 없이 RETURN문을 포함할 수 있음 적어도 하나의 RETURN문을 포함해야 함 출력 파라미터를 사용하여 값을 전달할 수 있음 단일 값을 반환해야 함 - Syntax CREATE [OR REP..

PL SQL 2016.07.07