[Oracle] 오라클 - PL/SQL 기본 문법 (SELECT)
by mini_min[Oracle]
오라클 - PL/SQL(절차적) 기본 문법
✔️ PL/SQL 이란?
: 프로그래밍언어의 특성을 가지는 SQL의 확장
: 데이터 조작과 질의 문장은 PL/SQL의 절차적 코드 안에 포함된다.
: 주로 자료 내부에서 sql 명령문 만으로 처리하기에 복잡한 자료의 저장이나 프로시저와 트리거를 작성하는데 사용한다.
- PL/SQL 프로그래밍 단위
ㆍPL/SQL 익명 블록 (블록화시켜서 프로그램화 시키는 것)
ㆍ함수 (function)
ㆍ프로시저 ⭐⭐⭐ 명령을 저장하고 필요할 때 사용하는 것
ㆍ패키지 : 패키지 명세, 패키지 바디
ㆍ트리거
- DBMS_OUTPUT 패키지
: 디버깅 또는 출력 메시지 그리고 REPORTS 를 출력하기 위한 패키지다.
: PUT_LINE 해서 결과 . 먼저 출력 하기 전 설정이 필요하다.
= SQL>SET SERVEROUTPUT ON
⚡ 자료형이 조금 다르다.
= VARCHAR2(n) : 4000바이트보다 많이 , 3만 바이트 이상 저장 가능
⚡ 변수 이름을 먼저 주고, 타입은 나중에 줘야한다. (자바랑 다름)
⚡ 대입 연산자는 " := " 이다.
✔️ PL/SQL 변수
: 변수와 상수는 반드시 DECLARE 부에서 선언되어야한다.
: 단, FOR 문에서 사용되는 반복용 변수는 예외다.
✔️ PL/SQL 기본 문법
DECLARE : 선언부
BEGIN : 실행부
END : 끝맺음
-- 예시 (1)
DECLARE
vname VARCHAR2(50);
vpay NUMBER;
BEGIN
SELECT name, sal + bonus INTO vname, vpay
FROM emp
WHERE empNo = '1001';
DBMS_OUTPUT.PUT_LINE('이름: ' || vname || ', 급여 : ' || vpay);
END;
/
💡 PL/SQL 에서의 SELECT 문 형식
SELECT 컬럼, 컬럼 INTO 변수, 변수 FROM 테이블 [WHERE 조건]
❌ 데이터가 많으면 안된다.
WHERE 절이 없기 때문에 데이터 60개가 나올 수 있다!!
= 값이 반드시 존재해야하고, 데이터가 하나여야한다.
💡 emp.name%TYPE;
%TYPE : 테이블의 컬럼을 참조하는 변수 선언까지 함
-- 예시 (2)
DECLARE
vrec emp%ROWTYPE;
BEGIN
SELECT * INTO vrec
FROM emp
WHERE empNo = '1001';
DBMS_OUTPUT.PUT_LINE('이름: ' || vrec.name || ', 급여 : ' || vrec.sal);
END;
/
💡 %ROWTYPE : 테이블 또는 뷰의 행을 참조하는 레코드 선언
EMP 테이블의 컬럼 이름만 알면 쉽게 참조할 수 있다.
empNo 가 1001 인 레코드의 ROWTYPE 을 반환함.
-- 예시 (3)
-- 레코드 유형 선언 : 사용자 정의 구조체 변수
: 다양한 유형의 데이터 값을 저장할 수 있는 복합 변수이다. 테이블의 행 데이터 또는 행의 특정 컬럼을 저장하는데 유용!
: 레코드 유형을 정의해도 되고, %ROWTYPE 선언해도 똑같다~
DECLARE
선언부 (레코드 유형 선언)
TYPE mytype IS RECORD
(
name emp.name%TYPE,
pay NUMBER
);
-- 레코드 변수 선언
vrec MYTYPE;
BEGIN
SELECT name, sal INTO vrec
FROM emp
WHERE empNo = '1001';
DBMS_OUTPUT.PUT_LINE('이름: ' || vrec.name || ', 급여 : ' || vrec.pay);
END;
/
⭐ mytype 이란 TYPE 을 만들었다.
⭐ vrec 은 MYTYPE 이란 레코드 변수 선언! (안에 들어있는 컬럼을 접근할 때 쩜을 찍어서 접근한다.)
'SQL쿼리' 카테고리의 다른 글
[Oracle] 오라클 - PL/SQL 프로시저 (삽입/수정/삭제) (0) | 2022.08.17 |
---|---|
[Oracle] 오라클 - PL/SQL 제어구조 (IF / CASE / LOOP / WHILE / FOR / CONTINUE) (0) | 2022.08.16 |
[Oracle] 오라클 - 피벗 (PIVOT과 UNPIVOT) (0) | 2022.08.15 |
[Oracle] 오라클 - 계층형 질의 (Hierarchical Query) (0) | 2022.08.15 |
[Oracle] 오라클 - 뷰(VIEW) 및 시퀀스 / 시노님 (0) | 2022.08.15 |
블로그의 정보
개발자 미니민의 개발로그
mini_min