본문 바로가기

Database/PL SQL

PL/SQL Tutorial - Type, Variables

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