SELECT USER
FROM DUAL;
--==>> SCOTT
/* SQL 접속 모두 해제
같은 시트에 작업해도 상관없지만, 그럼 헷갈림.
SQL 워크시트와 PL SQL 워크시트 구분해서 작업할것임 */
-- ■■■ PL/SQL ■■■--
-- 1. PL/SQL(Procedural Language extension to SQL)은
-- 프로그래밍 언어의 특성을 가지는 SQL 의 확장이며,
-- 데이터 조작과 질의 문장은 PL/SQL 의 절차적 코드 안에 포함된다.
-- 또한, PL/SQL 을 사용하면 SQL로 할 수 없는 절차적 작업이 가능하다.
-- 여기에서 [절차적] 이라는 단어가 가지는 의미는
-- 어떤 것이 어떤 과정을 거쳐 어떻게 완료되는지
-- 그 방법을 정확하게 코드에 기술한다는 것을 의미한다.
-- 2. PL/SQL 은 절차적으로 표현하기 위해
-- 변수를 선언할 수 있는 기능,
-- 참과 거짓을 구별할 수 있는 기능,
-- 실행 흐름을 컨트롤할 수 있는 기능 등을 제공한다.
-- 3. PL/SQL 은 블럭 구조로 되어 있으며,
-- 블럭은 선언 부분, 실행 부분, 예외 처리 부분의
-- 세 부분으로 구성되어 있다.
-- 또한, 반드시 실행 부분은 존재해야 하며, 구조는 다음과 같다.
-- 4. 형식 및 구조
/*
([] : 생략가능)
[DECLARE]
-- 선언문(declarations)
BEGIN
-- 실행문(startments)
[EXCEPTON]
-- 예외 처리문(exception handlers)
END;
*/
-- 5. 변수 선언
/*
DECLARE
변수명 자료형;
변수명 자료형 := 초기값;
BEGIN
PL/SQL 구문;
END;
*/
-- ERD 클라우드
-- 트랜잭션 ROLLBACK;
SET SERVEROUTPUT ON;
--==>> 작업이 완료되었습니다.(0.064초)
-- DBMS_OUTPUT.PUT.LINE()을 통해
-- 화면에 결과를 출력하기 위한 환경변수 설정
--○ 변수에 임의의 값을 대입하고 해당 변수에 담긴 값을 출력하는
-- PL/SQL 구문 작성
-- ■■■ ■■■ 블럭 잡아서 실행 해 줘야 함.
DECLARE
-- 선언부
D1 NUMBER := 10; --D1의 데이터타입은 NUMBER이야.
D2 VARCHAR(30) := 'HELLO';
D3 VARCHAR(20) := 'ORACLE';
BEGIN
-- 실행부
-- System.out.prntln(D1);
DBMS_OUTPUT.PUT_LINE(D1); -- 패키지 안에 담겨있는 PUT_LINE 함수 호출
DBMS_OUTPUT.PUT_LINE(D2);
DBMS_OUTPUT.PUT_LINE(D3);
END;
--==>>
/*
10
HELLO
ORACLE
PL/SQL 프로시저가 성공적으로 완료되었습니다.
*/
--○ 변수에 임의의 값을 대입하고 추가 연산 처리하여
-- 해당 변수에 담긴 값을 출력하는 PL/SQL 구문 작성
DECLARE
--선언부
V1 NUMBER := 20;
V2 VARCHAR(30) := 'HELLO';
V3 VARCHAR(20) := 'ORACLE';
BEGIN
--실행부
V1 := V1 + 10; -- V1 +=10 ; << 자바 형식
-- 위의 V1 값인 20에 10을 더한값이 출력됨
V2 := V2 || '주형이';
V3 := V3 || 'World';
DBMS_OUTPUT.PUT_LINE(V1);
DBMS_OUTPUT.PUT_LINE(V2);
DBMS_OUTPUT.PUT_LINE(V3);
END;
/*
30
HELLO주형이
ORACLEWorld
PL/SQL 프로시저가 성공적으로 완료되었습니다.
*/
-- JAVA
구문
{ --시작
} --끝
-- ORACLE ( {}를 사용하지 않음. )
구문
END 구문
(IF (IF 시작) ~ END IF (IF문 종료))
*/
-- 블레이스가 없으므로 들여쓰기를 잘 해줘야 함
--○ IF 문(조건문)
-- IF ~ END IF;
-- IF ~ THEN ~ ELSE ~ END IF;
-- IF ~ THEN ~ ELSIF ~ THEN ~ ELSIF ~ THEN ~ END IF; -- ELSIF라고 쓴다.
-- 1. PL/SQL 의 IF 문장은 다른 언어의 IF 조건문과 거의 유사하다.
-- 일치하는 조건에 따라 선택적으로 작업을 수행할 수 있도록 한다.
-- TRUE 이면 THEN 과 ELSE 사이의 문장을 수행하고
-- FALSE 나 NULL 이면 ELSE 와 END IF; 사이의 문장을 수행하게 된다.
-- 2. 형식 및 구조
/*
IF 조건
THEN 처리구문;
END IF; -- IF시작했다 IF 끝났다. 라고 조건 잡아주기
*/
--※ ELSE 에는 THEN 을 사용하지 않는다! 주의!
/*
IF 조건
THEN 처리구문;
ELSE
처리문; -- 아닐때 처리는 THEN이 없음
END IF;
*/
--중첩구문
/*
IF (조건) -- 조건에 ()를 쓰는 걸 강사님 추천
THEN 처리문;
ELSIF (조건)
THEN 처리문
ELSIF (조건)
THEN 처리문
ELSE
처리문;
END IF;
*/
--○ 변수에 담겨있는 값에 따라
-- Excellent, Good, Fail 로 구분하여
-- 결과를 출력하는 PL/SQL 구믄을 작성한다.
DECLARE
-- 선언부
GRADE CHAR;
BEGIN
GRADE := 'B';
--DBMS_OUTPUT.PUT_LINE(GRADE);
IF GRADE = 'A'
THEN DBMS_OUTPUT.PUT_LINE('EXCELLENT');
ELSIF GRADE = 'B'
THEN DBMS_OUTPUT.PUT_LINE('GOOD');
ELSE
DBMS_OUTPUT.PUT_LINE('FAIL');
END IF;
END;
--==>> EXCELLENT
--==>> GOOD
--==>> FAIL
--※ 외부 입력 처리
-- 1. ACCEPT 문
-- ACCEPT 변수명 PROMPT '메세지';
-- 외부 변수로부터 입력받은 데이터를 내부 변수에 전달할 때
-- [&외부변수명] 형태로 접근하게 된다.
--○ 정수 2개를 외부로부터(사용자로부터) 입력받아
-- 이들의 덧셈 연산 결과를 출력하는 PL/SQL 구문을 작성한다.
ACCEPT N1 PROMPT '첫 번째 정수를 입력하세요';
-- 창에서 10을 입력하면 외부변수인 N1에 값이 담김
ACCEPT N2 PROMPT '두 번째 정수를 입력하세요';
DECLARE
--선언부
-- → 주요 변수 선언 및 초기화
--VNUM1 NUMBER := 10;
VNUM1 NUMBER := &N1; -- 위에서 입력한 10을 VNUM1 으로 끌고들어온다.
--VNUM2 NUMBER := 20;
NUM2 NUMBER := &N2;
VRESULT NUMBER := 0;
BEGIN
-- 실행부
-- → 연산 및 처리
VRESULT := VNUM1 + VNUM2;
-- → 결과 출력
DBMS_OUTPUT.PUT_LINE('처리결과 : ' || VRESULT);
END;
-- 문제
-- 사용자로부터 입력받은 금액을 화폐 단위로 출력하는 프로그램을 작성한다.
-- 단, 반환금액은 편의상 1천원 미만, 10원 이상만 가능하다고 가정한다.
/*
실행 예)
바인딩 변수 입력 대화창 → 금액 입력 : 990 OR 980 이라고 입력하면
입력받은 금액 총액 : 980원
화폐단위 : 오백원 1, 백원 4, 오십원 1, 십원 3
*/
ACCEPT INPUT PROMPT '금액 입력';
DECLARE
--○ 주요 변수 선언 및 초기화
MONEY NUMBER := &INPUT; -- 연산을 위해 담아둘 변수
MONEY2 NUMBER := &INPUT; -- 결과 출력을 위해 입력값을 담아둘 변수(→ 연산과정에서 값이 변하기 때문에)
M500 NUMBER; -- 500원짜리 갯수를 담아둘 변수
M100 NUMBER; -- 100원 짜리 개수를 담아둘 변수
M50 NUMBER; -- 50원 짜리 개수를 담아둘 변수
M10 NUMBER; -- 10원 짜리 개수를 담아둘 변수
BEGIN
--○ 연산 및 처리
-- MONEY 를 500으로 나눠서 몫을 취하고 나머지는 버린다. → 500원의 갯수
M500 := TRUNC(MONEY / 500);
-- MONEY를 500으로 나눠서 몫은 버리고 나머지를 취한다.<< MOD(MONEY, 500) → 500원의 갯수를 뺀 나머지.
-- 500원짜리는 빠져나가고 남은 금액으로 처리해야 하기에
MONEY := MOD(MONEY, 500);
-- MONEY 를 100으로 나눠서 몫을 취하고 나머지는 버린다. → 100원의 갯수
M100 := TRUNC(MONEY / 100);
-- MONEY 를 100으로 나눠서 몫은 버리고 나머지를 취한다. → 100원의 갯수 확인하고 남은 금액
-- 이 금액으로 MONEY 를 갱신.
MONEY := MOD(MONEY, 100);
-- MONEY 를 50으로 나눠서 몫을 취하고 나머지는 버린다. → 50원의 갯수
M50 := TRUNC(MONEY / 50);
-- MONEY 를 50으로 나눠서 몫은 버리고 나머지를 취한다. → 50원의 갯수 확인하고 남은 금액
-- 이 금액으로 MONEY 를 갱신
MONEY := MOD(MONEY, 50);
-- MONEY 를 10으로 나눠서 몫을 취하고 나머지는 버린다. → 10원의 갯수
M10 := TRUNC(MONEY / 10);
MONEY := MOD(MONEY, 10);
--○ 결과 출력
-- 취합된 결과(화폐 단위별 개수)를 형식에 맞게 최종 출력한다.
DBMS_OUTPUT.PUT_LINE('입력받은 금액 총액 : ' || MONEY2 || '원');
DBMS_OUTPUT.PUT_LINE('화폐 단위 : 오백원 ' || M500
|| ', 백원 ' || M100
|| ', 오십원 '|| M50
|| ', 십원 ' || M10);
END;
/*
END;
입력받은 금액 총액 : 950원
화폐 단위 : 오백원 1, 백원 4, 오십원 1, 십원 0
PL/SQL 프로시저가 성공적으로 완료되었습니다.
*/
Oracle -PLSQL 함수 (0) | 2025.07.11 |
---|---|
Oracle -PLSQL 실습2(반복문) (0) | 2025.07.11 |
Oracle -DELETE, VIEW 생성 (3) | 2025.07.11 |
Oracle - 테이블 전체 컬럼 이름UPDATE (1) | 2025.07.11 |
Oracle - UPDATE 실습2 (0) | 2025.07.10 |
댓글 영역