본문 바로가기

콩's EDUCATION/콩's DATABASE

PL / SQL

* SQL와 PL/SQL?


 

SQL : DB 접근, 조작, 조회 기능 제공 명령어 모음

--> SELECT NAME FROM EMP;

--> 화면 출력, NAME 결과 변수 저장?, SQL 10번 이상 사용하고 싶을 때(나열이 아닌 반복문을 통한 효율성)

--> SQL + (반복문, 조건문, 오류발생 처리문, 변수)를 쓰기 위해 PL(PROGRAMMING LANG.)/SQL

 

PLSQL : SQL+변수

--> FUNCTION : 반드시 1개 결과 리턴한다.

CREATE ... FUNCTION a
()

return number;

...

begin

...

return(변수) cf)변수는 반드시 number 타입이어야 한다.

end;

--> PROCEDURE : 결과가 여러개를 리턴하거나 아예 리턴될 필요가 없다.

CREATE ... PROCEDURE

()

IS

begin

...

end; 

 

* PL/SQL 생성, 삭제


 

CREATE FUNCTION 함수명(전달데이터타입, 갯수, 순서)

RETURN (리턴값타입)

IS

변수선언문
BEGIN
실행문
EXCEPTION
오류처리문

RETURN (리턴값)

END;

 

CREATE PROCEDURE 프로시저명(전달 IN,OUT, 갯수, 순서)

IS

변수 선언문

BEGIN

실행문

EXCEPTION

오류처리문

END;

 

QUSETION)

1000 값 전달하면 --> 7% 세금 계산

2000 값 전달하면 --> 7% 세금 계산

1500 값 전달하면 --> 7% 세금 계산

 

 

CREATE OR REPLACE FUNCTION F_TAX(A IN NUMBER)

RETURN NUMBER

IS

VAR B NUMBER;

BEGIN
B := A * 0.07;

RETURN(B);
END;

/

 

SQL> VAR C NUMBER;

SQL> PRINT C;

SQL> EXECUTE C:=F_TAX(1000);

 

SQL> SHOW ERRORS;

 

삭제 : DROP FUNCTION F_TAX;

 

Q. '시작합니다' 출력

 

 

 

CREATE OR REPLACE FUNCTION F_TAX(A IN NUMBER)
RETURN NUMBER
IS
VAR B NUMBER;
BEGIN
dbms_output.put_line('시작합니다');
B := A * 0.07;
dbms_output.put_line('끝납니다');
RETURN(B);
END;

/

 

SQL> EXECUTE C:=F_TAX(1000);

SQL> PRINT C;

SQL> SET SERVEROUTPUT ON;

 

 

Q. 프로시저 생성

CREATE OR REPLACE PROCEDURE P_TAX(A IN NUMBER, B OUT NUMBER)

IS

BEGIN

dbms_output.put_line('시작합니다');
B := A * 0.07;

dbms_output.put_line('끝납니다');
END;

/

 

SQL> EXEC p_tax(1000, :c);

SQL> PRINT c;

SQL> SET SERVEROUTPUT ON;

 

C:\oracleXE\app\oracle\product\10.2.0\server\sqlplus\admin\glogin.sql 파일끝에 추가

 

SET PAGESIZE 100;

SET LINESIZE 130;

SET SERVEROUTPUT ON;

 

* 생성 함수 내용 확인


 

SELECT text

FROM user_source

WHERE name = 'F_TAX'

ORDER BY line;