SQL활용 2022/03/23(SQL 작성하기) PL/SQL

무간·2022년 3월 23일

PL/SQL

일반 프로그래밍 언어 요소를 다 갖고 있으며, 데이터베이스 업무를 처리하기 위한 최적화된 언어
BLOCK 구조로 다수의 SQL 문을 한번에 처리하므로 수행 속도가 빠름


  • OUTPUT환경을 ON으로
SET SERVEROUTPUT ON;

BEGIN
    -- console.log, System.out.println()
    DBMS_OUTPUT.PUT_LINE('hello');
END;
/

DECLARE
    -- int V_NUM =1234;    
    -- String V_STR = "";
    V_NUM NUMBER(4) := 1234;    
    V_STR VARCHAR2(10);    
BEGIN
    V_STR := 'HELLO';
    DBMS_OUTPUT.PUT_LINE('V_NUM : '||V_NUM);
    DBMS_OUTPUT.PUT_LINE('V_NUM : '||V_STR);
END;
/

조건문

DECLARE
    V_SCORE NUMBER :=95;
    V_GRADE VARCHAR2(2) := '';
BEGIN
    IF(V_SCORE >= 90) THEN
        V_GRADE := 'A';
    ELSIF(V_SCORE >= 80)THEN
        V_GRADE := 'B';
    ELSIF(V_SCORE >= 70)THEN
        V_GRADE := 'C';
    ELSE
        V_GRADE := 'F';
    END IF;
    DBMS_OUTPUT.PUT_LINE('점수 : '||V_SCORE || ' / 등급 : ' || V_GRADE);
END;
/

반복문(구구단)

DECLARE
    V_NUM NUMBER := 3;
BEGIN
    -- for(int I=0; I<=9; I++)
    FOR I IN 1..9 LOOP
        DBMS_OUTPUT.PUT_LINE(V_NUM || '*' || I || '=' || V_NUM*I);
    END LOOP;
END;
/

반복문 + 조건문

DECLARE
    V_NUM NUMBER(3) := 10;
BEGIN
    FOR I IN 1..V_NUM LOOP
        IF MOD(I, 2) =0 THEN
            DBMS_OUTPUT.PUT_LINE( I || '는 짝수');
        ELSE
            DBMS_OUTPUT.PUT_LINE( I || '는 홀수');
        END IF;
    END LOOP;
END;
/

추가하기( MEMBER2 테이블)

DECLARE
    -- 변수정의
BEGIN
    -- 수행
    -- INSERT INTO 테이블명(컬럼명) VALUES(추가할값)
    INSERT INTO MEMBER2(USERID, USERPW, USERNAME, USERAGE, USERDATE)
    VALUES('A', 'A', '가', 11, CURRENT_DATE);
    
    COMMIT;
EXCEPTION
    -- 오류처리
    WHEN OTHERS THEN -- 모든예외
    ROLLBACK;
END;
/
SELECT * FROM MEMBER2;
/

반복문으로 10명 추가하기( MEMBER2 테이블)

DECLARE
    -- 변수정의
BEGIN
    -- 수행
    -- INSERT INTO 테이블명(컬럼명) VALUES(추가할값)
    FOR I IN 1..10 LOOP
        INSERT INTO MEMBER2(USERID, USERPW, USERNAME, USERAGE, USERDATE)
        VALUES('A'|| I, 'A', '가', 11, CURRENT_DATE);
    END LOOP;
    
    COMMIT;
EXCEPTION
    -- 오류처리
    WHEN OTHERS THEN -- 모든예외
    ROLLBACK;
END;
/
SELECT * FROM MEMBER2;
/

조회하기

DECLARE
    -- 변수정의
    V_MEM MEMBER2%ROWTYPE;
    V_USERID MEMBER2.USERID%TYPE; -- VARCHAR2(30)
BEGIN
    -- SELECT *FROM (테이블명) WHERE (조건);
    SELECT * INTO V_MEM FROM MEMBER2 WHERE USERID='A';
    DBMS_OUTPUT.PUT_LINE( V_MEM.USERID );
    DBMS_OUTPUT.PUT_LINE( V_MEM.USERNAME );
END;
/

여러개

DECLARE
    CURSOR CUR IS (SELECT * FROM MEMBER2);
BEGIN
    FOR TMP IN CUR() LOOP
        DBMS_OUTPUT.PUT_LINE( 'USERID : ' || TMP.USERID );    
    END LOOP;
END;
/
profile
당신을 한 줄로 소개해보세요

0개의 댓글