set serveroutput on;
begin
dbms_output.put_line('안녕 PL/SQL');
END;
--스칼라 변수 선언하고 변수값 조회
set serveroutput on;
--선언
declare
sonno number(4);
sonname varchar2(12);
--실행문 시작
begin
sonno := 1001;
sonname := '홍길동';
dbms_output.put_line('사번 이름');
dbms_output.put_line('------------');
dbms_output.put_line(''||sonno||''||sonname);
--실행문 종료
end;
--pl/sql의 select문으로 emp테이블에서 사원번호와 이름 조회
set serveroutput on;
declare
sonno emp.empno%type;
sonname emp.ename%type;
begin
select empno, ename into sonno, sonname
from emp
where ename = 'SMITH';
dbms_output.put_line('사번 이름');
dbms_output.put_line('--------------');
dbms_output.put_line(''||sonno||''||sonname);
end;
--PL/SQL의 제어문
--단일 IF THEN 문
SET SERVEROUTPUT ON;
DECLARE
SONEMP EMP%ROWTYPE;
SONSAL NUMBER(7,2);
BEGIN
SELECT * INTO SONEMP
FROM EMP
WHERE ENAME = 'SMITH';
--커미션이 NULL일 경우를 조건에 지정하고 수행
IF (SONEMP.COMM IS NULL) THEN
SONSAL := SONEMP.SAL*12;
--조건이 FALSE이거나 NULL이면 수행 종료
END IF;
DBMS_OUTPUT.PUT_LINE('사번 이름 커미션');
DBMS_OUTPUT.PUT_LINE('-------------------');
DBMS_OUTPUT.PUT_LINE(''||SONEMP.EMPNO||''||SONEMP.ENAME||''||SONSAL);
END;
--부서번호로 부서명 확인
DECLARE
SONNO EMP.EMPNO%TYPE;
SONNAME EMP.ENAME%TYPE;
SONDEPTNO EMP.DEPTNO%TYPE;
--SONDNAME 변수를 NULL로 초기화한다.
SONDNAME VARCHAR2(20) := NULL;
BEGIN
SELECT EMPNO, ENAME, DEPTNO
INTO SONNO, SONNAME, SONDEPTNO
FROM EMP
WHERE EMPNO = 7369;
--SONDEPTNO 변수가 10일 경우를 조건에 지정하고 수행
IF (SONDEPTNO = 10) THEN
SONDNAME := 'ACCOUNTING';
END IF;
IF (SONDEPTNO = 20) THEN
SONDNAME := 'CLERK';
END IF;
IF (SONDEPTNO = 30) THEN
SONDNAME := 'SALES';
END IF;
IF (SONDEPTNO = 40) THEN
SONDNAME := 'OPERATIONS';
END IF;
DBMS_OUTPUT.PUT_LINE(' 사번 이름 부서명');
DBMS_OUTPUT.PUT_LINE('-----------------------');
DBMS_OUTPUT.PUT_LINE(''||SONNO||''||SONNAME||''||SONDNAME);
END;
--이중 IF THEN ELSE문
--사원명으로 연봉 조회
DECLARE
SONEMP EMP%ROWTYPE;
SONSAL NUMBER(7,2);
BEGIN
SELECT * INTO SONEMP
FROM EMP
WHERE ENAME = 'SMITH';
IF(SONEMP.COMM IS NULL) THEN
SONSAL := SONEMP.SAL*12;
ELSE--커미션이 NULL이 아닐 때 수행
SONSAL := SONEMP.SAL*12+SONEMP.COMM;
END IF;
DBMS_OUTPUT.PUT_LINE(' 사번 이름 연봉');
DBMS_OUTPUT.PUT_LINE('-----------------------');
DBMS_OUTPUT.PUT_LINE(''||SONEMP.EMPNO||''||SONEMP.ENAME||''||SONSAL);
END;
--다중 IF THEN ELSIF ELSE 문
--EMP테이블에서 부서번호로 부서명 확인
DECLARE
SONEMP EMP%ROWTYPE;
SONDNAME VARCHAR2(14);
BEGIN
SELECT*INTO SONEMP
FROM EMP
WHERE ENAME = 'SMITH';
IF(SONEMP.DEPTNO = 10)THEN
SONDNAME := 'ACCOUNTING';
ELSIF(SONEMP.DEPTNO = 20)THEN
SONDNAME := 'CLERK';
ELSIF(SONEMP.DEPTNO = 30)THEN
SONDNAME := 'SALES';
ELSIF(SONEMP.DEPTNO = 40)THEN
SONDNAME := 'OPERATIONS';
END IF;
DBMS_OUTPUT.PUT_LINE(' 사번 이름 부서명');
DBMS_OUTPUT.PUT_LINE('--------------------------');
DBMS_OUTPUT.PUT_LINE(''||SONEMP.EMPNO||''||SONEMP.ENAME||''||SONDNAME);
END;
--반복문
--LOOP END LOOP문으로 1부터 5까지 출력하기
DECLARE
NUM NUMBER := 1;
BEGIN
--END LOOP문에서 제어권을 전달받고 반복
LOOP
DBMS_OUTPUT.PUT_LINE(NUM);
--NUM 변수에 1을 더하여 NUM 변수에 할당하여 누적
NUM := NUM+1;
IF (NUM>5) THEN
EXIT;
END IF;
--제어문을 LOOP문으로 전달
END LOOP;
END;
--FOR IN END LOOP
--1부터 5까지 출력
DECLARE
BEGIN
FOR NUM IN 1..5 LOOP
DBMS_OUTPUT.PUT_LINE(NUM);
END LOOP;
END;
--WHILE...LOOP...END LOOP 문
DECLARE
NUM NUMBER := 1;
BEGIN
WHILE (NUM <= 5) LOOP
DBMS_OUTPUT.PUT_LINE(NUM);
NUM := NUM + 1;
END LOOP;
END;
'SQL > 연습문제 풀이' 카테고리의 다른 글
[SQL] Python을 이용한 Oracle DB 접근 (0) | 2023.01.17 |
---|---|
[SQL] 다중 IF..THEN..ELSIF..ELSE / WHILE / SELECT (0) | 2023.01.17 |
[SQL] 테이블 생성, 레코드 추가, 정보 조회 등 (0) | 2023.01.17 |
SQL (ORACLE) 연습문제 푸는 사이트 (0) | 2022.10.25 |
댓글