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 |