개발자 미니민의 개발스터디

[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 이란 레코드 변수 선언! (안에 들어있는 컬럼을 접근할 때 쩜을 찍어서 접근한다.)

 

 

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기