PL/SQL (P14-1)

  • 절차적인 언어를 확장해서 프로그래밍 하듯이 쓰는것

 

 

Advantages of PL/SQL (P14-2)

  • 오라클은 한번에 하나의 SQL 문장을 수행
  • 여러 SQL 문장을 한번에 오라클에 보낼 수 있음
  • 오라클과의 커뮤니케이션을 줄일 수 있다, 네트워크 트래픽 등도 줄음.
  • 중간꺼(3~6등 같은 거)를 가져오는 방법은 여러가지가 있다.  -> SQL 문장의 간단한 것보다는 빠른게 좋은 쿼리문이다.

 

 

PL/SQL Block Structure (P14-3)

  • Block = BEGIN ~ END
  • DECLARE : BEGIN ~ END 사이에 사용가능, 변수, 커서 등 선언 가능
  • EXCEPTION : 예외처리

 

 

PL/SQL Category (P14-5)

  • Anonymous blocks : 이름 없이 잠깐 사용~

 

 

SQL*Plus Commands (P14-6)

  • ACCPET : 입력받기
  • VARIABLE : 변수 선언
  • PRINT : 변수인쇄
  • EXECUTE : 저장프로시저 실행

 

 

PL/SQL Block Debugging (P14-8)

  • ERRORS : 오류보기

 

 

Anonymous Block (P14-9)

  • EDIT anony : 치면 메모장이 뜸~
  • ACCPET p_sal PROMT "Enter the salary:' -> User에게 입력받음
  • VARIABLE : 변수 선언
  • DECLARE

v_sal NUMBER := &p_sal;   -> v_sal 변수 선언후 거기에 p_sal 값을 저장  -> ' := '임을 주의

  • P14-9 Example
  1. SQL> EDIT anony
  2. SQL> @anony
    Enter the salary:10
    old   2: v_sal NUMBER := &p_sal;
    new   2: v_sal NUMBER := 10;
    old   4: :g_annual_sal := &p_sal*12;
    new   4: :g_annual_sal := 10*12;
  3. PL/SQL procedure successfully completed.

  4. G_ANNUAL_SAL
    ------------
             120

 

  

Stored Program (P14-10)

  • Procedure : 리턴 불가(C#의 out 같은 것 통해서 리턴처럼 처리할 수는 있음), Select안에서 사용불가
  • Function : 리턴 가능, Select안에서 사용가능

 

 

Stored Procedure (P14-11)

  • 기본 문법

CREATE OR REPLACE PROCEDURE name

[(Parameter, ...)]

IS

PL/SQL Block; (BEGIN~END 를 반드시 사용해야함)

 

  • Parameter 종류

IN : value만 전달됨

OUT : C#의 out과 같음, 주소값이 넘어감

IN, OUT : C#의 ref와 같음

 

  • 실행방법

EXEC 저장프로시저명 (매개변수 목록, ~~~);

 

  • P14-13 Example
  1. SQL> EDIT p1
  2.  
  3. CREATE OR REPLACE PROCEDURE change_salary(p_id IN NUMBER, p_new_sal IN NUMBER)
    IS
    BEGIN
     UPDATE s_emp
     SET salary = p_new_sal
     WHERE id = p_id;
     COMMIT;
    END change_salary;
    /
  4.  
  5. SQL> @p1
  6. Procedure created.
  7.  
  8. SQL> EXEC change_salary(1,10000);
  9. PL/SQL procedure successfully completed.

 

 

Stored Function (P14-14)

  • P14-16 Example
  1. SQL> EDIT f1
  2.  
  3. CREATE OR REPLACE FUNCTION get_salary(p_id IN NUMBER) RETURN NUMBER
    IS v_sal NUMBER;
    BEGIN
     SELECT salary INTO v_sal
     FROM s_emp WHERE id = p_id;
     RETURN v_sal;
    END get_salary;
    /
  4.  
  5. SQL> @f1
  6. Function created.
  7.  
  8. SQL> VARIABLE g_sal NUMBER
  9.  
  10. SQL> EXEC :g_sal := get_salary(1);
  11. PL/SQL procedure successfully completed.
  12.  
  13. SQL> PRINT g_sal;
  14.      G_SAL
    ----------
         10000

 

 

 

 

 

 

Chapter15~~~

 

Scalar Data Type (P15-2)

딱 하나만을 데이터로 같는 것

 

 

%TYPE Attribute (P15-7)

데이터 타입 선언

v_last_name   s_emp.last_name%TYPE;   ->  v_last_name의 타입을 s_emp.last_name랑 같게 만듦

 예제~

  1. SQL> ed a1
  2.  
    • DECLARE
       v_last_name s_emp.last_name%TYPE;
       v_first_name s_emp.first_name%TYPE;
      BEGIN
       SELECT last_name, first_name
       INTO v_last_name, v_first_name
       FROM s_emp
       WHERE id = 1;
    •  DBMS_OUTPUT.PUT_LINE(v_last_name);
       DBMS_OUTPUT.PUT_LINE(v_first_name);
      END;
      /
  3.  
  4.  
  5. SQL> SET SERVEROUTPUT ON
  6.  
  7. SQL> @a1
    Velasquez
    Carmen
  8. PL/SQL procedure successfully completed.

 

 

%ROWTYPE Attribute (P15-8)

v_dept   s_dept%ROWTYPE   -> s_dept 테이블에 있는 모든 컬럼만큼 각각 변수를 선언함(변수명 = 컬럼명)  -> 변수의 타입 = s_dept 테이블의 각 컬럼의 타입이랑 같게~

이 글은 스프링노트에서 작성되었습니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Gungume