▶ PL/SQL (Procedural Language SQL) 변수
변수는 데이터 임시 저장 영역이다
저장된 값을 저장 할 수 있다
저장된 값을 반복해서 재사용 할 수 있다
▷ 변수명 규칙
반드시 문자로 시작한다
문자, 숫자, 특수문자 포함 가능하다
변수명 30byte 이하로 예약어는 포함이 불가하다
TYPE 변수 사용한다
▷ 변수 Type을 선언할때 명시적으로 작성하지 않고 사용하는 방법도 있다.
%ROWTYPE - 해당 테이블이나 뷰의 컬럼 속성을 그대로 들고 오는 형태이다. - 사용방법 : 변수명 테이블이름%ROWTYPE
- 테이블이나 뷰 내부의 컬럼 데이터 형 , 크기 , 속성을 그대로 사용할 수 있다.
- 테이블이름%ROWTYPE ; 으로 사용
- 지정된 테이블의 구조와 같은 변수 구조를 선언 할 수 있다.
- DB컬럼의 데이터타입, 컬럼의 수 등등 알기 어려울 때 쓰면 편하다
- 테이블의 컬럼이 변경돼도 수정할 필요 없다.
%TYPE - 해당 테이블의 컬럼 속성을 지정하여 그대로 들고 오는 형태이다. - 사용방법 : 변수명 테이블이름.컬럼명%TYPE
DECLARE
v_profno f_professor.profno%TYPE; -- column 속성을 지정해서 들고 오기
v_pay f_professor.pay%TYPE;
BEGIN
SELECT profno, pay INTO v_profno, v_pay
FROM T_PROFESSOR
WHERE profno = 1001;
DBMS_OUTPUT.PUT_LINE(v_profno || '번 교수의 급여는' || v_pay || '입니다');
END;
/
DROP TABLE t_emp5 CASCADE CONSTRAINT;
CREATE TABLE t_emp5
AS
SELECT empno, ename, sal FROM t_emp;
DECLARE
vno t_emp5.empno%TYPE;
vname t_emp5.ename%TYPE;
vsal t_emp5.sal%TYPE;
BEGIN
SELECT empno, ename, sal INTO vno, vname, vsal
FROM t_emp5
WHERE empno = 7900;
DBMS_OUTPUT.PUT_LINE(vno || ' ' || vname || ' ' || vsal);
END;
/
▷ rowtype 변수를 활용한 테이블 -> 테이블 데이터 입력
v_record에 row_test 컬럼을 담고 no = 1인 row_test를 v_record에 담는다 그리고 row_test2에 v_record를 삽입한다
CREATE TABLE row_test (
no NUMBER,
name VARCHAR2(10),
hdate DATE
);
CREATE TABLE row_test2
AS
SELECT * FROM row_test;
INSERT INTO row_test VALUES(1, 'AAA', SYSDATE);
INSERT INTO row_test VALUES(2, 'BBB', SYSDATE);
INSERT INTO row_test VALUES(3, 'CCC', SYSDATE);
SELECT * FROM row_test;
SELECT * FROM row_test2;
DECLARE
v_record row_test%ROWTYPE;
BEGIN
SELECT * INTO v_record -- 모든 컬럼이 담긴 row 타입
FROM row_test
WHERE no = 1;
INSERT INTO ROW_TEST2
VALUES v_record; -- rowtype 변수로 insert
END;
/
▷ update
DECLARE
v_record row_test%ROWTYPE;
BEGIN
SELECT * INTO v_record
FROM ROW_TEST
WHERE NO = 1;
v_record.name := 'DDD';
UPDATE row_test2
SET ROW = v_record -- ROW 사용하여 모든 row를 rowtype 변수 값으로 업데이트
WHERE no = 1;
END;
/
'database > Oracle' 카테고리의 다른 글
[Oracle] PL/SQL_cursor (0) | 2022.09.05 |
---|---|
[Oracle] PL/SQL_control (0) | 2022.09.05 |
[Oracle] constraint 정리 (0) | 2022.09.04 |
[Oracle] constraint (제약조건) (0) | 2022.09.04 |
[Oracle] View (0) | 2022.09.04 |