- [PL/SQL] 기본 구조2024년 07월 22일
- chantleman
- 작성자
- 2024.07.22.: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; /
728x90'오라클 > PLSQL' 카테고리의 다른 글
PL/SQL 장바구니 (0) 2024.10.23 [PL/SQL] 구구단 예제 (1) 2024.07.23 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)