비밀번호 expired 나오면 sys로 접속 아래 문장을 쳐준다.
--1. ALTER USER SCOTT IDENTIFIED BY TIGER;
--2. ALTER USER MANDANG IDENTIFIED BY MADANG;
PL/SQL 프로그램의 기본 단위
구성 키워드 | 필수/선택 | 설명 |
DECLARE(선언부) | 선택 | 실행에 사용될 변수. 상수, 커서 등을 선언 |
BDGIN(실행부) | 필수 | 조건문,반복문, SELECT,DML, 함수 등을 정의 |
EXCEPTION(예외 처리부) | 선택 | PL.SQL 실행 도중 발생하는 오류(예외상황)를 해결하는 문장 기술 |
변수와 상수
변수: 데이터를 일시적으로 저장 / 저장되는 값의 변경 가능 / 이름, 저장할 자료형을 지정
①변수이름 ② 자료형 ③:= ④값 또는 값이 도출되는 여러 표현식
상수: 한번 저장한 값이 프로그램 종료시까지 유지 / CONSTANT 키워드 사용
①변수이름 ②CONSTANT ③자료형 ④:= ⑤값 또는 값을 도출하는 여러 표현식;
변수의 기본값 지정
①변수이름 ②자료형 ③DEFAULT ④값 또는 값 도출되는 여러 표현식;
변수 NULL 값 저장 막기
①변수이름 ②자료형 ③NOT NULL ④:= 또는 DEFAULT ⑤값 또는 값을 도출하는 여러 표현식;
변수의 자료형
스칼라형 : 냐부 구성 요소가 없는 단일 값
분류 | 자료형 | 설명 |
숫자 | NUMBER | 소수점을 포함할 수 있는 최대 38자리 숫자 데이터 |
문자열 | CHAR | 최대 32.767 바이트 고정 길이 문자열 데이터 |
VARCHAR2 | 최대 32.767 바이트 가변 길이 문자열 데이터 | |
날짜 | DATE | 기원전 4712년 1월 1일부터 서기 9999 12월 31일까지 날짜 데이터 |
논리 데이터 | BOOLEAN | PL/SQL에서만 사용할 수 있는 논리 자료형 TRUE, FALSE,NULL을 포함 |
IF 조건문 IF 조건식 THEN 수행할 명령어; END IF;
종류 | 설명 |
IF-THEN | 특정 조건을 만족하는 경우 작업 수행 |
IF-THEN-ELSE | 특정 조건을 만족하는 경우와 반대 경우 각각 지정한 작업 수행 |
IF-THEN-ELSIF | 여러 조건에 따라 각각 지정한 작업 수행 |
CASE 조건문
종류 | 설명 |
단순 CASE문 | 비교 기준이 되는 조건의 값이 여러 가지일 때 해당 값만 명시하여 작업 수행 |
검색 CASE문 | 특정한 비교 기준 없이 여러 조건식을 나열하여 조건식에 맞는 작업 수행 |
CASE 비교기준 WHEN 값1 THEN 수행할 명령어;
WHEN 값2 TEHN 수행할 명령어;
END CASE;
결과물을 보고 싶다면 SERVEROUTPUT 설정 을 ON 으로 설정해 주어야 한다.
SET SERVEROUTPUT ON; 실행 후 삭제
--1
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, PL/SQL!');
END;
--2
DECLARE
V_EMPNO NUMBER(4) :=7788;
V_ENAME VARCHAR2(10);
BEGIN
V_ENAME := 'SCOTT';
DBMS_OUTPUT.PUT_LINE('V_ENAME:' || V_ENAME);
END;
--3
DECLARE
V_EMPNO NUMBER(4) :=7788;
V_ENAME VARCHAR2(10);
BEGIN
V_ENAME := 'SCOTT';
DBMS_OUTPUT.PUT_LINE('V_ENAME:' || V_ENAME);
DBMS_OUTPUT.PUT_LINE('V_EMPNO:' || V_EMPNO);
END;
--4
DECLARE
V_TAX CONSTANT NUMBER(1) :=3;
BEGIN
DBMS_OUTPUT.PUT_LINE('V_TAX:' || V_TAX);
END;
--5.
DECLARE
V_DEPTNO NUMBER(2) DEFAULT 10;
BEGIN
DBMS_OUTPUT.PUT_LINE('V_DEPTNO:'||V_DEPTNO);
END;
--6.
DECLARE
V_DEPTNO NUMBER(2) NOT NULL:=10;
BEGIN
DBMS_OUTPUT.PUT_LINE('V_DEPTNO:'||V_DEPTNO);
END;
--7. NULL을 허용하지 않으며 디폴트 값은 10이야! 라는 의미
DECLARE
V_DEPTNO NUMBER(2) NOT NULL DEFAULT 10;
BEGIN
DBMS_OUTPUT.PUT_LINE('V_DEPTNO:'||V_DEPTNO);
END;
--8.
--V_DEPTNO DEPT테이블의 DEPTNO 타입과 같은 타입 정의하고 50으로 초기화
DECLARE
V_DEPTNO DEPT.DEPTNO%TYPE :=50;
BEGIN
--V_DEPTNO 출력하기
DBMS_OUTPUT.PUT_LINE('V_DEPTNO:'||V_DEPTNO);
END;
--9
DECLARE
--V_DEPT_ROW DEPT 테이블의 ROW와 같은 타입 선언
V_DEPT_ROW DEPT%ROWTYPE;
BEGIN
SELECT DEPTNO, DNAME, LOC INTO V_DEPT_ROW --변수명
FROM DEPT--테이블명
WHERE DEPTNO =40; --부서번호가 40번
DBMS_OUTPUT.PUT('DEPTNO:'||V_DEPT_ROW.DEPTNO); --부서번호 출력
DBMS_OUTPUT.PUT('DNAME:'||V_DEPT_ROW.DNAME); --부서명 출력
DBMS_OUTPUT.PUT('LOC:'||V_DEPT_ROW.LOC); --부서위치 출력
END;
--10.
DECLARE
V_NUMBER NUMBER :=13;
BEGIN
IF MOD(V_NUMBER,2) = 1 THEN --홀수 여부 검사
DBMS_OUTPUT.PUT_LINE('V_NUMBER의 값인'||V_NUMBER||'은/는 홀수입니다.'); --V_NUMBER가 홀수 또는 짝수 임을 출력
END IF;
END;
--11.
DECLARE
V_NUMBER NUMBER :=14;
BEGIN
IF MOD(V_NUMBER,2) = 1 THEN --홀수 여부 검사
DBMS_OUTPUT.PUT_LINE(V_NUMBER||'은/는 홀수입니다.'); --V_NUMBER가 홀수 또는 짝수 임을 출력
ELSE
DBMS_OUTPUT.PUT_LINE(V_NUMBER||':짝수');
END IF;
END;
--12. IF 문으로 학점 출력하기 90점이상:A 80이상:B 70이상:C 60점이상:D 그외 F
DECLARE
V_SCORE NUMBER :=87;
BEGIN
IF V_SCORE>=90 THEN
DBMS_OUTPUT.PUT_LINE('A');
ELSIF V_SCORE>=80 THEN
DBMS_OUTPUT.PUT_LINE('B');
ELSIF V_SCORE>=70 THEN
DBMS_OUTPUT.PUT_LINE('C');
ELSIF V_SCORE>=60 THEN
DBMS_OUTPUT.PUT_LINE('D');
ELSE
DBMS_OUTPUT.PUT_LINE('F');
END IF;
END;
--13.
DECLARE
V_SCORE NUMBER :=87;
BEGIN
CASE TRUNC(V_SCORE/10) --10으로 나누고 소수 이해 절삭하면 앞자리만 남음
WHEN 10 THEN DBMS_OUTPUT.PUT_LINE('A');
WHEN 9 THEN DBMS_OUTPUT.PUT_LINE('A');
WHEN 8 THEN DBMS_OUTPUT.PUT_LINE('B');
WHEN 7 THEN DBMS_OUTPUT.PUT_LINE('C');
WHEN 6 THEN DBMS_OUTPUT.PUT_LINE('D');
ELSE DBMS_OUTPUT.PUT_LINE('F');
END CASE;
END;
--14. 13번과 동일하나 CASE 옆에 식을 쓰지 않고 WHEN에 작성해서 처리하기
DECLARE
V_SCORE NUMBER :=87;
BEGIN
CASE
WHEN V_SCORE>=90 THEN DBMS_OUTPUT.PUT_LINE('A');
WHEN V_SCORE>=80 THEN DBMS_OUTPUT.PUT_LINE('B');
WHEN V_SCORE>=70 THEN DBMS_OUTPUT.PUT_LINE('C');
WHEN V_SCORE>=60 THEN DBMS_OUTPUT.PUT_LINE('D');
ELSE DBMS_OUTPUT.PUT_LINE('F');
END CASE;
END;
--15. LOOP와 END LOOP를 사용하여 1부터 5까지 출력하기
DECLARE
V_NUM NUMBER :=1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(V_NUM);
V_NUM := V_NUM +1;
EXIT WHEN V_NUM >5;
END LOOP;
END;
--16 5부터 1까지 찍어보기
DECLARE
V_NUM NUMBER :=5;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(V_NUM);
V_NUM := V_NUM -1;
EXIT WHEN V_NUM <1;
END LOOP;
END;
--17 1,3,5,7,9 출력
DECLARE
V_NUM NUMBER :=1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(V_NUM);
V_NUM := V_NUM +2;
EXIT WHEN V_NUM >9;
END LOOP;
END;
--18.FOR문 이용해서 1부터 5까지 출력
BEGIN
FOR i IN 1..5 LOOP
DBMS_OUTPUT.PUT_LINE('I:'||i);
END LOOP;
END;
--19 LOOP를 이용해서 1~10 숫자 중 짝수만 출력하기
BEGIN
FOR i IN 1..10 LOOP
CONTINUE WHEN MOD(I,2)= 1; --홀수이면 건너 뛰기
DBMS_OUTPUT.PUT_LINE('I:'||i);
END LOOP;
END;
--20.
V_DEPTNO 값을 10으로 초기화 하되 변수의 자료형을 DEPT 테이블의 DEPTNO의 자료형과 같은
타입으로 참조형 선언하기
V_DEPT 값이 10이면 DNAME: ACCOUNTING 이라고 출력
V_DEPT 값이 20이면 DNAME: RESEARCH 이라고 출력
V_DEPT 값이 30이면 DNAME: SALES 이라고 출력
V_DEPT 값이 40이면 DNAME:OPERATIONS 이라고 출력
DECLARE
V_DEPTNO DEPT.DEPTNO %TYPE :=10;
BEGIN
CASE V_DEPTNO
WHEN 10 THEN DBMS_OUTPUT.PUT_LINE('DNAME:ACCOUNTING');
WHEN 20 THEN DBMS_OUTPUT.PUT_LINE('DNAME:RESEARCH');
WHEN 30 THEN DBMS_OUTPUT.PUT_LINE('DNAME:SALES');
WHEN 40 THEN DBMS_OUTPUT.PUT_LINE('DNAME:OPERATIONS');
ELSE DBMS_OUTPUT.PUT_LINE('DNAME:N/A');
END CASE;
END;
'Coding > 데이터베이스' 카테고리의 다른 글
QUERY 예제 총 복습 _1 (0) | 2022.09.26 |
---|---|
레코드와 컬렉션 & JOIN 연습문제 (1) | 2022.09.19 |
[오라클] 마당서점 복습하기2 : 조인함수,서브쿼리사용 (0) | 2022.09.05 |
[오라클] 마당서점 (0) | 2022.08.29 |
[오라클] SQL기초 복습예제 (0) | 2022.08.22 |