Heesang kim dexaboud3@naver.com PL/SQL Heesang kim dexaboud3@naver.com.

Slides:



Advertisements
Similar presentations
Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
Advertisements

2008 년 11 월 20 일 실습.  실험제목 ◦ 데이터베이스 커넥션 풀  목표 ◦ 데이터베이스 커넥션 풀의 사용.
PowerBuilder Stored Procedure DW
PARK SUNGJIN Oracle 설치 PARK SUNGJIN
DB 프로그래밍 학기.
DB 프로그래밍 학기.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
PL/SQL.
Database Laboratory, Hong Ik University
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
컴퓨터 프로그래밍 기초 [Final] 기말고사
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
MySQL 및 Workbench 설치 데이터 베이스.
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
PL/SQL 문법 부 프로그램 (프로시저, 함수) 패키지&트리거
5장 Mysql 데이터베이스 한빛미디어(주).
10장 함수.
Chapter 05 데이터베이스 프로그래밍.
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
07 그룹 함수 그룹 함수의 개념 그룹 함수의 종류 데이터 그룹 생성 HAVING 절.
5장. 참조 타입.
07. 디바이스 드라이버의 초기화와 종료 김진홍
3.2 SQL Server 설치 및 수행(계속) 시스템 데이터베이스 master
Heesang kim PL/SQL 3 Heesang kim.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
23장. 구조체와 사용자 정의 자료형 2.
18강. 데이터 베이스 - II JDBC 살펴보기 Statement객체 살펴보기 Lecturer Kim Myoung-Ho
17강. 데이터 베이스 - I 데이터 베이스의 개요 Oracle 설치 기본적인 SQL문 익히기
KHS JDBC Programming 4 KHS
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
5장 Mysql 데이터베이스 한빛미디어(주).
10장. 예외처리.
KIM HEESANG PL/SQL 2 KIM HEESANG
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
You YoungSEok Oracle 설치 You YoungSEok
C#.
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
JDBC Lecture 004 By MINIO.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
ADO.NET (SqlConnection, SqlCommand)
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
김선균 컴퓨터 프로그래밍 기초 - 7th : 함수 - 김선균
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
CHAP 21. 전화, SMS, 주소록.
제 23 장 오라클에서 보안 기능.
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
함수, 모듈.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
 6장. SQL 쿼리.
임시테이블과 테이블변수 SQLWorld Study Group - 최명환 -.
7 생성자 함수.
6 객체.
Ⅰ. 데이터베이스 정의 Ⅱ. MS SQL 서버 Ⅲ. 데이터베이스 인터페이스
Presentation transcript:

Heesang kim dexaboud3@naver.com PL/SQL Heesang kim dexaboud3@naver.com

PL/SQL Procedural Language extension to SQL SQL문장에서 변수정의, 조건처리(IF), 반복처리(LOOP, WHILE, FOR) 등을 지원하는 Procedure Language 장점 BLOCK구조로 다수의 SQL문을 한번에 처리 (속도 향상) 모든 요소는 하나 또는 두 개 이상의 블록으로 구성하여 모듈화가 가능 VARIABLE, CONSTANT, CURSOR, EXCEPTION을 정의하고, SQL문장과 Procedural 문장에서 사용 한다. 테이블의 데이터 구조와 컬럼명에 준하여 동적으로 변수를 선언 가능

PL/SQL 기본 구조 논리적인 블록으로 나누는 구조화된 블록 언어 블록 구성 선언부 (선택) 실행부 (필수) 예외 처리부 (선택) DECLARE를 사용해서 나타냄 변수, 상수, 커서(CURSOR), 사용자 정의 Exception을 선언 실제 처리 로직을 담당(처리)하는 부분 BEGIN으로 시작되어 END로 끝남 일반적 오류를 정의하고 처리하는 부분 EXCEPTION 키워드 사용

PL/SQL 기본 구조 문장의 종료 시점에 세미콜론(;) 사용 값 할당에 ‘:=‘를 사용 단일행 주석: -- 여러행 주석: /* */ PL/SQL블록은 행에 ‘/’ 가 있으면 종결 결과 메시지를 확인하기 위해 명령어 입력 SET SERVEROUTPUT ON;

PL/SQL 블록 유형 Anonymous Block Procedure Function 프로그램 안에서 선언/실행 매개변수를 받고 반복적 사용 가능 보통 연속 실행 또는 구현이 복잡한 트랜잭션을 수행하는 PL/SQL 블록을 데이터베이스에 저장하기 위해 생성 Function 보통 값을 계산하고 결과를 받기 위한 함수로 사용 RETURN문에 데이터 타입을 반드시 선언해야 함 RETURN 문을 통해서 값을 반환

Procedure과 function Procedure 서버에서 실행이 된다. 리턴값이 있어도 되고 없어도 된다.(out parameter로 처리) Select문에서는 호출이 불가능하다. 프로시저는 실행, 처리를 할때 주로 사용된다. Function 리턴값이 필수이고 하나만 된다. 피라미터는 IN값만 사용할 수 있다(default parameter’s option is IN) Select에서 호출이 가능하다. 클라이언트에서 처리한다. 주로 간단한 계산, 수치 이런 결과를 나타낼때 사용한다.

PL/SQL 블록 유형 Anonymous Block DECLARE counter INTEGER; -- counter INTEGER := 0; -- 초기화를 하지 않아 counter 는 NULL이다. BEGIN IF counter IS NULL THEN DBMS_OUTPUT.PUT_LINE('Result : COUNTER IS NULL'); END IF; END;

PL/SQL 블록 유형 Procedure CREATE OR REPLACE PROCEDURE testProcedure IS hello varchar(20) := 'Hello'; world varchar(20) := 'World'; BEGIN DBMS_OUTPUT.PUT_LINE(hello || ' ' || world); END testProcedure; / EXECUTE testProcedure; Begin문 안에서는 함수나 프로시저를 호출 할때 execute를 사용x

PL/SQL 블록 유형 Function CREATE OR REPLACE FUNCTION calc(n1 NUMBER, n2 NUMBER) RETURN NUMBER IS n NUMBER; BEGIN n := n1 + n2; RETURN n; END calc; / SELECT calc(1,3) FROM dual;

PL/SQL 블록 유형 Function CREATE OR REPLACE FUNCTION out_fn (outparm OUT VARCHAR2) RETURN VARCHAR2 IS BEGIN outparm := 'out param'; RETURN 'return param'; END out_fn; / -- 마지막에 꼭 넣어줘야 함 DECLARE retval VARCHAR2(20); outval VARCHAR2(20); BEGIN retval := out_fn(outval); DBMS_OUTPUT.put_line(outval); DBMS_OUTPUT.put_line(retval); END;

예외처리부 EXCEPTION WHEN 예외1 THEN 예외처리1 WHEN 예외2 THEN 예외처리2 … WHEN OTEHRS THEN 예외처리 EXCEPTION 오라클에서 미리 정의된 내용 사용자가 직접 정의해서 사용할 수 있는 EXCEPTION

예외처리부

예외처리부 예외 내용 예외 번호 SQLCODE 발생시점 ACCESS_INTO_NULL ORA-06530 -6530 초기화 되지 않은 오브젝트에 값을 할당 COLLECTION_IS_NULL ORA-06531 -6531 초기화 되지 않은 중첩 테이블이나 VARRAY 같은 콜렉션을 EXISTS 외의 다른 메소드로 접근을 시도 DUP_VAL_ON_INDEX ORA-00001 -1 유일 인덱스가 걸린 컬럼에 중복 데이터를 입력 LOGIN_DENIED ORA-01017 -1017 잘못된 사용자나 비밀번호로 로그인 시도 NOT_LOGGED_ON ORA-01012 -1012 오라클에 연결되지 않은 경우 ZERO_DIVIDE ORA-01476 -1476 제수가 0일 때 발생

예외처리부

IF 문 IF 조건 THEN 처리문; END IF; IF 조건 THEN 처리문 1; ELSE 처리문 2; END IF; IF 조건1 THEN 처리문 1; ELSIF 조건2 THEN 처리문 2; … ELSE 처리문 n; END IF;

IF 문

CASE 문

NULL 문 아무것도 처리하지 않겠다는 것을 나타냄

반복문 LOOP … END LOOP; 간단하지만 내부에 처리문장만 나열한다면 무한루프에 빠진다. ‘EXIT;’ 을 사용해서 반복문을 종료하는 구문을 사용해야 한다. WHILE 조건 LOOP … END LOOP; FOR 카운터 IN [REVERSE] 최소값..최대값 LOOP … END LOOP;

LOOP

WHILE-LOOP

FOR-LOOP

GOTO 해당 라벨로 바로 이동한다.

CURSOR 쿼리에 의해 반환되는 결과는 메모리 상에 위치하게 되는데 커서(cursor)를 이용 하여 결과집합에 접근할 수 있음.(간단하게 포인터라고 생각하면된다.) 커서 선언 CURSUR 커서명 IS SELECT 문장; 커서 열기(open) OPEN 커서명; 패치(fetch) FETCH 커서명 INTO 변수…; 커서 닫기(close) CLOSE 커서명;

CURSOR

CURSOR %FOUND %NOTFOUND %ISOPEN %ROWCOUNT 커서가 막 오픈된 상태에서는 NULL 값을 반환한다. 오픈되고 첫 번째 패치가 발생한 이후부터는 TRUE 값을 반환하 며 더 이상 패치할 로우가 없을 경우 FALSE를 반환한다. %NOTFOUND 더 이상 패치(할당)할 로우가 없음을 의미한다. %FOUND와 반대 %ISOPEN 커서가 오픈된 상태일 경우 TRUE 값을 반환한다. %ROWCOUNT 카운터(counter) 역할을 한다. 커서가 막 오픈되었을 때에는 0, 패치될 때마다 1씩 증가한다.

변수와 상수 변수 선언 상수 선언 emp_num1 NUMBER(9); grade CHAR(2); emp_num2 INTEGER := 1; 상수 선언 nYear CONSTANT INTEGER := 30; (o) nYear CONSTANT INTEGER; (x)

TYPE %TYPE %ROWTYPE 참조할 테이블에 있는 컬럼의 데이터 타입을 가져옴 변수명 테이블명.컬럼명%TYPE 하나 이상의 값에 적용 일반 변수에는 사용할 수 없다. 컬렉션이나 OBJECT 타입 변수에서만 사용 가능

RECORD 배열 형태와 다르게 여러 개의 데이터 타입으로 구성될 수 있음 (구조체와 비슷) PL/SQL에서 사용하는 테이블 형태의 데이터 타입 구문형식 TYPE 레코드이름 IS RECORD (필드1 데이터타입1, 필드 2 데이터타입2,…) 레코드이름 테이블명%ROWTYPE; 레코드이름 커서명%ROWTYPE;

RECORD DB 스키마 Id(PK) Password Name Email varchar(25) varchar(100) TABLE NAME : MEMBER (04.JDBC_Programming2.pptx) Id(PK) Password Name Email varchar(25) varchar(100)

RECORD

과제 구구단 전체를 출력하는 익명함수를 작성하세요. DECLARE counter INTEGER; BEGIN FOR i IN 1 .. 9 LOOP counter := 2 * i; DBMS_OUTPUT.PUT_LINE('2 * ' || i || ' = ' || counter); END LOOP; END; 입력 값을 받아, 2 ~ 9라면 구구단을 출력하고 그 외의 값일 경우 “2 ~ 9 사이의 정수 값이 와야 합니다.”를 출력하는 프로시저 “the_rules_of_multiplication”를 만드세요. EXECUTE the_rules_of_multiplication(5); EXECUTE the_rules_of_multiplication(1); EXECUTE the_rules_of_multiplication(10);

과제 Member 테이블에서 ID(PK)를 이용하여 name, password, email을 수정 할 수 있는 프로시저를 만드시오. Member 테이블에서 ID(PK)를 이용하여 Email을 얻어오는 함수를 작성하시오.