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 |