728x90
반응형
PL/SQL 이란?
오라클에서 제공하는 프로그래밍언어로,
Procedural Language/SQL 의 약자이다.
일반 프로그래밍 언어적인 요소를 거의 다 가지고 있기 때문에
실무에서 요구되는 절차적인 데이터 처리를 다 할 수 있다.
특히 SQL과 연동되어서 막강한 기능을 구현할 수 있다.
데이터 트랜잭션 처리능력이나 정보보호, 데이터 대한 보안,
예외처리 기능, 객체지향 등 데이터베이스와 관련된 중요한 모든 기능을 지원하기 때문에
데이터베이스 업무를 처리하기에 최적화된 언어이다.
PL/SQL 기본 구조
선언부, 실행부, 예외처리부로 구성된다.
Anonymous PL/SQL Block과 Stored PL/SQL Block이 있다.
주의!
PL/SQL 은 기본적으로 처리된 PL/SQL 문장의 결과를 화면에 출력하지 않는다.
따라서
> SET SERVEROUTPUT ON;
을 입력해 화면 출력기능을 활성화시켜야한다.
예시 1: 1~10까지의 합 구하기
declare
v_num int;
v_sum int:=0;
begin
v_num:=1;
loop
v_sum := v_sum+v_num;
if v_num >= 10 then
exit;
end if;
v_num := v_num+1;
end loop;
dbms_output.put_line(v_sum);
exception
when others then
dbms_output.put_line(sqlcode||sqlerrm);
end;
/
show serveroutput;
set serveroutput on;
예시 2: 1~20까지의 자연수 가운데 3의 배수만 합계를 구하고
출력을 "TOTAL : " 로 합계를, "Last number : " 로 마지막 숫자를 출력하라
declare
v_num int;
v_sum int:=0;
begin
v_num:=1;
loop
if mod(v_num,3)=0 then
v_sum:=v_sum+v_num;
end if;
if v_num >= 20 then
exit;
else
v_num := v_num+1;
end if;
end loop;
dbms_output.put_line('TOTAL : '|| v_sum || ' Last number : ' || v_num);
exception
when others then
dbms_output.put_line(sqlcode||sqlerrm);
end;
/
show serveroutput;
set serveroutput on;
예시 3: deptno로 dname을 출력하는 사용자정의 함수 작성하기
show serveroutput;
set serveroutput on;
create or replace function get_dept_name(v_deptno dept.deptno%type)
return dept.dname%type
is
v_dname dept.dname%type;
begin
select dname
into v_dname
from dept
where deptno=v_deptno;
return v_dname;
exception
when others then
dbms_output.put_line(sqlcode || sqlerrm);
return 0;
end;
/
select empno, ename, deptno, get_dept_name(deptno) from emp;
(참고로, 오라클에서 제공하는 기본 scott 스키마를 이용했습니다)
만든 함수 코드 확인하기
우리가 만든 함수는 하나의 객체로 들어가있습니다.
select object_name, object_type from user_objects;
맨 위에 type이 FUNCTION 인 객체를 확인할 수 있습니다.
select line, text from user_source
where name='GET_DEPT_NAME';
함수 호출하는 방법 3가지
1. select 문 안에서
2. 다른 모듈에서
3. sql*plus 명령
728x90
반응형
'Archive > Develop' 카테고리의 다른 글
[ Oracle ] 프로시저와 sql*plus 예제 (프로시저 호출하는 방법) (0) | 2021.05.10 |
---|---|
[ C++ ] 함수 중복(Function Overloading) (0) | 2021.05.04 |
[ Django ]ORM ( Object-Relational Mapping ) 이란 무엇인가 (0) | 2021.04.24 |
[ GitHub ] Build Docker Image with Private Repo (0) | 2021.04.24 |
[ LeetCode ] 49번 Group Anagrams (0) | 2021.04.19 |