1. PL/SQL 이란?
- Procedural Language extensions to the Structured Query Language
- SQL은 데이터 조회 및 갱신에 사용되는 언어지만 한계를 가지고 있어 이를 극복하기 위해 만들어졌다.
- Oracle Database에 종속적인 언어이다.
(1) 익명 블록
- PL/SQL은 코드가 블록으로 구성되는 블록 구조 언어이다.
- 블록은 (선언 - 실행 - 예외 ) 구조로 나뉜다.
SET SERVEROUTPUT ON;
BEGIN
DBMS_OUTPUT.put_line ('Hello, World!');
END;
이 PL/SQL은 SQL Develpoer에 HelloWorld를 출력한다.
2. Data Type
모르고 지나가면 섭하다. 언어 배울때 이게 거의 첫 단계인듯? 헬로우 월드 찍어본 다음에. PL/SQL은 데이터 유형이 있는데 스칼라 값과 복합값을 갖는다.
Scala - Boolean, Number, String
Multiple - record, collection
DataType | |
Numeric | NUMBER(FLOAT, DOUBLE, INTEGER) |
Boolean | True, False, NULL |
Character | CHAR, VARCHAR2, LONG, RAW, LONG RAW, ROWID, UROWID |
Datetime | DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE, INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND |
3. Variables
variable_name datatype [NOT NULL] [:= initial_value];
너무 많이 봐서 눈이 아플 정도인 변수이다. 원형은 저렇고 예시를 들자면 이렇게 쓴다.
DECLARE
total_sales NUMBER(15, 2);
credit_limit NUMBER(10,0);
contact_name VARCHAR2(255);
BEGIN
NULL;
END;
default 값을 넣고 싶다면 DECLARE 부분에서 지정해주면 된다.
DECLARE
product_name VARCHAR2(100) := 'DELL Laptop';
BEGIN
NULL;
END;
NOT NULL을 걸어줄 수도 있다.
DECLARE
shipping_status VARCHAR2(25) NOT NULL := 'Shipped';
BEGIN
shipping_status := '';
END;
이렇게 작성하면 프로시져가 컴파일되지 않는다. NOT NULL 조건을 가지고 있기 때문에 null, blank는 허용하지 않기 때문이다.
DECLARE
customer_group VARCHAR2(100) := 'Silver';
BEGIN
customer_group := 'Gold';
DBMS_OUTPUT.PUT_LINE(customer_group);
END;
--Gold
default 값을 넣어준 이후에 begin에서 재정의하면 어떻게 될까? 당연하게도 재정의해준 값이 나오게 된다.
변수끼리의 재정의도 가능하다.
DECLARE
business_parter VARCHAR2(100) := 'Distributor';
lead_for VARCHAR2(100);
BEGIN
lead_for := business_parter;
DBMS_OUTPUT.PUT_LINE(lead_for);
END;
--Distributor
business_parter = 'Distributor'이다. 이후 lead_for에서 business_parter랑 매칭해주었다. 그렇게 하면 business_parter의 값이 매칭된다.
있는 테이블 값에서도 활용할 수 있다.
DECLARE
v_customer_name customers.name%TYPE;
n_credit_limit customers.CREDIT_LIMIT%TYPE;
BEGIN
SELECT
name, CREDIT_LIMIT
INTO
v_customer_name, n_credit_limit
FROM
customers
WHERE
customer_id = 38;
DBMS_OUTPUT.PUT_LINE(v_customer_name || ':' || n_credit_limit);
END;
/
customers.name%TYPE가 뭔지는 나도 모른다. 아마 DB는 알겠지
아무튼 customers 테이블에서 타입을 가져와 정의해주고, output으로 보여주는 프로시져이다.
Kraft Heinz:500
하인즈씨 하이 엘리니아가 요새 못사는지 한도가 얼마 안되시네
DECLARE
payment_term CONSTANT NUMBER := 45; -- days
payment_status CONSTANT BOOLEAN := FALSE;
BEGIN
payment_term := 30;
DBMS_OUTPUT.PUT_LINE(payment_term);
END;
이렇게 constant로 선언하면 바꿔줄 수 없다. 이걸 뭐라고 하더라 상수라고 했나 아무튼 고유한 값이 된다.
'Database > PL SQL' 카테고리의 다른 글
PL/SQL Tutorial - LOOP (0) | 2019.05.08 |
---|---|
PL/SQL Tutorial - NULL (0) | 2019.05.07 |
PL/SQL Tutorial - GOTO (0) | 2019.05.07 |
PL/SQL Tutorial - CASE (0) | 2019.04.30 |
PL/SQL Tutorial - IF (0) | 2019.04.30 |