* 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 RETURN(B); / 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) / 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('시작합니다'); dbms_output.put_line('끝납니다'); / 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;
B := A * 0.07;
END;
RETURN NUMBER
IS
VAR B NUMBER;
BEGIN
dbms_output.put_line('시작합니다');
B := A * 0.07;
dbms_output.put_line('끝납니다');
RETURN(B);
END;
B := A * 0.07;
END;
* 생성 함수 내용 확인
SELECT text
FROM user_source
WHERE name = 'F_TAX'
ORDER BY line;