yooniiverse
개발 블로그
yooniiverse
전체 방문자
오늘
어제
  • 분류 전체보기
    • 운영체제
    • 네트워크
    • ~2023.02
      • 외부교육
      • 대외활동
      • 스터디
      • 동아리
      • TIL
      • IT지식
      • 기타
      • 트러블 슈팅
      • 프로그래밍
      • Python
      • Java
      • JS
      • DB(SQL)
      • JSP
      • Spring
      • 기술면접
      • 자바
      • 코딩테스트
      • 자료구조
      • 알고리즘
      • 백준 문제풀이
      • 인공지능
      • 머신러닝
      • 프로젝트
      • 안드로이드 앱개발
      • 웹개발
      • 웹 서비스
      • 웹퍼블리싱
      • Node.js 백엔드 개발
      • CS
      • 1일 1CS지식
      • 운영체제
      • 네트워크
      • 데이터베이스
      • 정보처리기사
      • 도서 리뷰
      • 개발 관련 도서
      • 기타 도서

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
yooniiverse

개발 블로그

PL/SQL
~2023.02/DB(SQL)

PL/SQL

2022. 4. 12. 18:21
SET SERVEROUTPUT ON -- 출력해 주는 내용을 화면에 보여주도록 설정한다.
BEGIN
    DBMS_OUTPUT.PUT_LINE('HELLO WORLD!');
END;
/

 

-- PL/SQL에서 SELECT INTO문

-- PL/SQL의 SELECT 문으로 EMP 테이블에서 사원번호와 이름을 조회한다.

SET SERVEROUTPUT ON

DECLARE

-- %TYPE 속성으로 컬럼 단위 레퍼런스 변수 선언

  VEMPNO EMP.EMPNO%TYPE;

  VENAME EMP.ENAME%TYPE;

BEGIN

  DBMS_OUTPUT.PUT_LINE('사번 / 이름');

  DBMS_OUTPUT.PUT_LINE('-------------');



  SELECT EMPNO, ENAME INTO VEMPNO, VENAME

  FROM EMP

  WHERE ENAME='SCOTT';



-- 레퍼런스 변수에 저장된 값을 출력한다.

  DBMS_OUTPUT.PUT_LINE(VEMPNO || ' / ' || VENAME);

END;

/

 

-- 테이블 타입

SET SERVEROUTPUT ON
DECLARE
  -- 테이블 타입을 정의
  TYPE ENAME_TABLE_TYPE IS TABLE OF EMP.ENAME%TYPE
    INDEX BY BINARY_INTEGER;
  TYPE JOB_TABLE_TYPE IS TABLE OF EMP.JOB%TYPE
    INDEX BY BINARY_INTEGER;

  -- 테이블 타입으로 변수 선언
  ENAME_TABLE ENAME_TABLE_TYPE; -- String[] str = new String[14];
  JOB_TABLE JOB_TABLE_TYPE;
  I BINARY_INTEGER := 0;
BEGIN
  FOR K IN (SELECT ENAME, JOB FROM EMP) LOOP
    I := I + 1; -- 인덱스 증가
    ENAME_TABLE(I) := K.ENAME;
    JOB_TABLE(I) := K.JOB;
  END LOOP;
  
  -- 테이블 타입 변수에 저장된 내용을 출력
  FOR J IN 1..I LOOP
    DBMS_OUTPUT.PUT_LINE(RPAD(ENAME_TABLE(J), 12) || ' / ' || RPAD(JOB_TABLE(J), 9));
  END LOOP;
END;
/

출력 결과

 

-- 레코드 타입

SET SERVEROUTPUT ON
DECLARE
  -- 레코드 타입을 정의
  TYPE EMP_RECORD_TYPE IS RECORD(
    V_EMPNO EMP.EMPNO%TYPE,
    V_ENAME EMP.ENAME%TYPE,
    V_JOB EMP.JOB%TYPE,
    V_DEPTNO EMP.DEPTNO%TYPE
  );

  -- 레코드 타입인 변수 선언
  EMP_RECORD EMP_RECORD_TYPE;
BEGIN
  -- SCOTT 사원의 정보를 레코드 변수에 저장
  SELECT EMPNO, ENAME, JOB, DEPTNO
    INTO EMP_RECORD
    FROM EMP
    WHERE ENAME = UPPER('SCOTT');

  -- 레코드 변수에 저장된 사원 정보를 출력
  DBMS_OUTPUT.PUT_LINE('사원번호: ' || TO_CHAR(EMP_RECORD.V_EMPNO));
  DBMS_OUTPUT.PUT_LINE('이름: ' || EMP_RECORD.V_ENAME);
  DBMS_OUTPUT.PUT_LINE('담당업무: ' || EMP_RECORD.V_JOB);
  DBMS_OUTPUT.PUT_LINE('부서번호: ' || TO_CHAR(EMP_RECORD.V_DEPTNO));
END;
/

출력 결과

 

-- IF~THEN~END IF

SET SERVEROUTPUT ON
DECLARE
  VEMPNO NUMBER(4);
  VENAME VARCHAR2(20);
  VDEPTNO EMP.DEPTNO%TYPE;
  VDNAME VARCHAR2(20) := NULL;
BEGIN
  SELECT EMPNO, ENAME, DEPTNO INTO VEMPNO, VENAME, VDEPTNO
  FROM EMP
  WHERE EMPNO=7788;

  IF (VDEPTNO = 10) THEN
    VDNAME := 'ACCOUNTING';
  END IF;
  IF (VDEPTNO = 20) THEN
    VDNAME := 'RESEARCH';
  END IF;
  IF (VDEPTNO = 30) THEN
    VDNAME := 'SALES';
  END IF;
  IF (VDEPTNO = 40) THEN
    VDNAME := 'OPERATIONS';
  END IF;

  DBMS_OUTPUT.PUT_LINE('사번  이름  부서명');
  DBMS_OUTPUT.PUT_LINE(VEMPNO || ' ' || VENAME || ' ' || VDNAME);
END;
/

출력 결과

 

-- BASIC LOOP

SET SERVEROUTPUT ON
DECLARE
  N NUMBER := 1;
BEGIN
  LOOP
    DBMS_OUTPUT.PUT_LINE(N);
    N := N + 1;
    IF N > 5 THEN
      EXIT;
    END IF;
  END LOOP;
END;
/

출력 결과

 

-- FOR LOOP

DECLARE
BEGIN
  FOR N IN 1..5 LOOP
    DBMS_OUTPUT.PUT_LINE(N);
  END LOOP;
END;
/

출력 결과

 

-- WHILE LOOP

SET SERVEROUTPUT ON
DECLARE
 N NUMBER := 1;
BEGIN
  WHILE N <= 5 LOOP
    DBMS_OUTPUT.PUT_LINE(N);
    N := N + 1;
  END LOOP;
END;
/

출력 결과

'~2023.02 > DB(SQL)' 카테고리의 다른 글

커서와 트리거  (0) 2022.04.14
저장 프로시저와 저장 함수  (0) 2022.04.14
사용자 관리  (0) 2022.04.12
시퀀스  (0) 2022.04.11
가상 테이블인 뷰  (0) 2022.04.11
    '~2023.02/DB(SQL)' 카테고리의 다른 글
    • 커서와 트리거
    • 저장 프로시저와 저장 함수
    • 사용자 관리
    • 시퀀스
    yooniiverse
    yooniiverse

    티스토리툴바