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
- SQL> EDIT anony
- 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; - PL/SQL procedure successfully completed.
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
- SQL> EDIT p1
-
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;
/ - SQL> @p1
- Procedure created.
- SQL> EXEC change_salary(1,10000);
- PL/SQL procedure successfully completed.
Stored Function (P14-14)
- P14-16 Example
- SQL> EDIT f1
-
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;
/ - SQL> @f1
- Function created.
- SQL> VARIABLE g_sal NUMBER
- SQL> EXEC :g_sal := get_salary(1);
- PL/SQL procedure successfully completed.
- SQL> PRINT g_sal;
- 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랑 같게 만듦
예제~
- SQL> ed a1
-
- 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;
/
- DECLARE
- SQL> SET SERVEROUTPUT ON
- SQL> @a1
Velasquez
Carmen - PL/SQL procedure successfully completed.
%ROWTYPE Attribute (P15-8)
v_dept s_dept%ROWTYPE -> s_dept 테이블에 있는 모든 컬럼만큼 각각 변수를 선언함(변수명 = 컬럼명) -> 변수의 타입 = s_dept 테이블의 각 컬럼의 타입이랑 같게~
이 글은 스프링노트에서 작성되었습니다.





