오라클

[PL/SQL] 기본 구조

chantleman 2024. 7. 22. 16:47
DECLARE
	선언 부분(옵션)
    - 변수, 상수, cursor와 사용자 정의 exception등 선언
BEGIN
	실행 부분(필수)
    - 처리할 명령문들 절차적으로 기술
    - sql, 반복문, 조건문 
EXCEPTION
	예외 처리 부분(옵션)
    - 오류 처리에 관한 명령문
END;

 

 

DECLARE  -- 선언부. 변수, 상수 선언
	M_NAME VARCHAR2(50); -- 초기 변수 선언
    
    BEGIN   -- 제어, 반복문, 함수 등 다양한 로직 기술 실행
    
    	M_NAME:= '투케이' -- 변수에 값 대입
        
        DBMS_OUTPUT.PUT_LINE('======================');
        DBMS_OUTPUT.PUT_LINE('M_NAME: ' || M_NAME); -- 결과 출력
        DBMS_OUTPUT.PUT_LINE('======================');
    END;   -- 실행된 로직의 종료를 선언

 

 


 

 

항목 내용
declare 지역변수와 커서, 사용자 예외 선언
:=, select into, fetch into 변수할당
begin ... end 문장의 블록
--
/* ... */
한줄 주석
여러줄 주석
if ... elsif ... end if
case ... end case
분기문
while ... end loop
loop ... end loop, for ... end loop
반복문
exit 반복 블록 빠져나가기
goto 처리 순서 변경

 

 

 

PL/SQL 변수 종류

SCLAR 변수

- 데이터 하나만을 저장하는 일반적인 변수

 

REFERENCES 변수

- 해당 테이블의 row나 column의 타입과 크기를 참조하는 변수

 

COMPOSITE 변수

- PL/SQL에서 사용하는 배열 변수

- RECORD TYPE

- TABLE TYPE

 

BIND변수

- 파라미터로 넘겨지는 IN, INOUT에서 사용되는 변수

- 리턴되는 값을 전달받기 위해 선언되는 변수

 

 


변수의 데이터 타입(references변수에 사용하는 것)

데이터 타입 설명
테이블명.컬럼명%TYPE 해당 테이블의 해당컬럼의 타입과 동일하게 지정
테이블명%ROWTYPE 해당 테이블의 모든 컬럼과 동일하게 지정

 

 

초기값을 지정할 때 할당연산자 := 사용

식별자를 상수로 지정할 때는 constant라는 키워드 명시하고 초기값 반드시 지정

not null이 정의돼있으면 초기값 반드시 지정(초기값 정의하지 않은 변수는 null값 가짐)

 

 

 

 

 


예제)

declare
	v_num number:=37;
	begin
		dbms_output.enable;
		if mod(v_num,2)=0 then
			dbms_output.put_line(v_num||'는 짝수');
		else
			dbms_output.put_line(v_num || '는 홀수');
		end if;
	end;
/

 

 

 

declare
		v_avg_sale prod.prod_sale%type;
		v_sale number:=500000;
	begin
		dbms_output.enable;
		select avg(prod_sale) into v_avg_sale from prod;
		if v_sale <v_avg_sale then
			dbms_output.put_line('평균 단가'||to_char(v_avg_sale,'999,999,999')||'은'||' 500,000 초과입니다.');
		else
			dbms_output.put_line('평균 단가'||to_char(v_avg_sale,'999,999,999')||'은'||' 500,000 이하입니다.');
		end if;
	end;
/

select into로 변수에 값 할당

 

 

/ : PL/SQL문장의 끝을 표시하고 Ctrl+enter키가 작용하도록 함

 

 

프로시저가 성공적으로 완료됐다고 떴는데 출력결과가 안보이면 아래 코드를 실행시키고 해보세요

set serveroutput on

매 세션마다 초기화되므로 매번 재설정해야함

 

 

set serveroutput on
declare
v_id number:=1;
v_id2 number:=10;
begin
dbms_output.put_line('');
while v_id <20 loop
dbms_output.put(rpad(' ',v_id2,' '));
dbms_output.put_line(rpad('*',v_id,'*'));
v_id:=v_id+2;
v_id2:=v_id2-1;
end loop;
end;
/

 

 

 


accept p_job prompt '직업을 입력하세요: '
declare
v_name varchar2(30);
v_mileage number(10);
cursor member_cur is
select mem_name, mem_mileage
from member
where mem_job='&p_job'
order by mem_name asc;
begin
for mem_rec in member_cur loop
dbms_output.put_line(member_cur%rowcount||'번째'||mem_rec.mem_name||','||mem_rec.mem_mileage);
end loop;
end;
/

실행했을 때 소스코드도 같이 출력된다면

set verify off 
set echo off

이것도 같이 추가해서 실행시키면 됩니다.

 

 

 

 


 

 DECLARE 
  v_sum INT := 0;
  v_var INT := 1;
BEGIN
<<mylabel>>
  v_sum := v_sum + v_var;
  v_var := v_var + 1;
  IF v_var <= 10 THEN
    GOTO mylabel;
  END IF;
  DBMS_OUTPUT.PUT_LINE(v_sum);
  DBMS_OUTPUT.PUT_LINE(v_var);
END;
/

 

 

 

 

'오라클' 카테고리의 다른 글

오라클 exception  (0) 2024.07.23
[PL/SQL] 구구단 예제  (1) 2024.07.23
sequence  (0) 2024.07.22
테이블 복사, 삭제  (0) 2024.07.19
데이터 자동 생성  (0) 2024.07.19