컴퓨터 공부/Advanced Database

[6월 5일 5교시] PL/SQL 1

려리군 2009. 6. 5. 15:06

PL/SQL

SQL에 대한 프로시저 언어 확장판.

PL/SQL을 통해 SQL 문장들의 block이 한번에 오라클에 보내질 수 있다.

※ PL/SQL 블록에 이름을 붙이면 데이터베이스 파일(디스크)로 저장이 된다.

※ 서버에 JVM이 있기 때문에 Java 플그램도 서버 내에서 실행 가능.


PL/SQL 블록구조

DECLARE ...
BEGIN ...
EXCEPTION ...
END


※ Forms -> Oracle Developer


Anonymous block

응용 프로그램 안에서 나타난다.

데이터베이스에 저장되거나 이름이 있지 않다.

오라클은 PL/SQL block을 컴파일하고 SGA에 공유 풀에서 컴파일 된 형태를 두지만 소스코드와 컴파일된 형태를 보관하지 않는다.


Stored programs

스키마 오브젝트로서 데이터베이스에 생성되고 저장된다.

응용프로그램으로부터 이름에 의해 호출된다.

생성되고 컴파일되면 재컴파일 없이 실행될 수 있는 이름있는 객체이다.


SQL PLUS 명령

ACCEPT : 매크로처럼 문자열을 치환한다.

VARIABLE : 호스트, 바인드 변수(타입도 필요)를 선언한다.

PRINT : 바인드 변수를 출력한다.

EXECUTE : PL/SQL block을 실행한다.


※ PL/SQL 오류 메세지를 볼 때 사용한다.

SHOW ERRORS = SELECT * FROM user_errors;


Procedure, Function : 프로시저는 리턴이 없고 함수는 리턴이 있다는 것을 제외하고 동일하다.

Package : 관련된 procedure와 function들의 꾸러미들

※ 일반 오라클 함수는 standard package에 포함되어 있다.


Stored Procedure 예시

CREATE OR REPLACE PROCEDURE change_salary

(p_id IN NUMBER, p_new_sal IN NUMBER)

IS 

// DECLARE 섹션

BEGIN

UPDATE s_emp

SET salary = p_new_sal

WHERE id = p_id;

COMMIT;

END change_salary;


Stored Function 예시
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;