A>렉시칼 : 문자 집합
PL/ SQL 렉시칼: pl/sql 안에서 사용되는 문자 집합들
ex)식별자, 구분자 ,리터럴 등....
1.따옴표가 쓰일때
식별자의 대소문자 구분이 필요할 때,
공백 같은 문자가 포함될 경우
예약어 사용시
B>중첩된 PL/SQL 블록 작성하기
예시1. 변수의 스코프
DECLARE
v_first VARCHAR2(5) := 'Outer'; --자바로 따지면 전역변수
BEGIN
DECLARE
v_second VARCHAR2(5) := 'Inner'; --자바로 따지면 지역변수
BEGIN
DBMS_OUTPUT.PUT_LINE(v_first);
DBMS_OUTPUT.PUT_LINE(v_second);
END ;
DBMS_OUTPUT.PUT_LINE(v_first);
DBMS_OUTPUT.PUT_LINE(v_second); --얘는 변수의 스코프를 벗어난 셈. 오류가 일어남
END ;
DBMS_OUTPUT.PUT_LINE(v_second);
C> 변수의 제약
- 반드시 문자로 시작
- 문자, 숫자, 특수문자 안됨
- 30byte 이하
- 예약어로 불가
D> 변수의 종류
1.단순 변수
- 스칼라 변수
- 참조 변수
1-1. scalar 변수
- 상수로 만드려면 CONSTANT 붙임면 됨 , 선언과 동시에 초기화 필요
ex) 변수이름 CONSTANT 타입 := 초기화 값
- 타입의 지정 %TYPE : 테이블 내 칼럼과 동일한 타입 선언
- 동일한 행 선언 %ROWTYPE
EX) test테이블의 칼럼이 t1 number, t2 varchar2(10), t3 number 일때
test%ROWTYPE 이면 하나의 변수에 test의 칼럼을 모두 저장하는 변수로 선언됨
-변수 선언과 동시에 제약조건도 삽입 가능
ex) 식별자 타입 [제약조건] :=
-기본값 정의
ex) 식별자 타입 DEFAULT 기본값 :=
1-2. rowtype 예시
--emp3 테이블 생성
create table emp3 AS SELECT empno,ename,sal FROM emp;
--emp3 에 대한 pl/sql
DECLARE
v_row emp3%ROWTYPE;
BEGIN
SELECT * INTO v_row FROM emp3
WHERE empno=7900;
DBMS_OUTPUT.PUT_LINE(v_row.empno||'**'||v_row.ename||'**'||v_row.sal);
END;
/
1-3. rowtype 으로 레코드 복제하기
DECLARE
v_record row_test%ROWTYPE;
BEGIN
SELECT * INTO v_record
FROM row_test
WHERE no=1;
INSERT INTO row_test2
VALUES v_record;
END;
/
1-4. rowtype을 이용해 행 수정하기
DECLARE
v_record row_test%ROWTYPE;
BEGIN
SELECT * INTO v_record
FROM row_test WHERE no=1;
v_record.name :='DDD';
UPDATE row_test
SET row = v_record --한 row에다 row정보를 가지고 있는 v_record 정보 삽입
WHERE no=1;
END;
'DB관련 > oracle' 카테고리의 다른 글
PL/SQL -4 CURSOR (0) | 2021.01.21 |
---|---|
PL/SQL 3- 복합 변수, 제어문 (0) | 2021.01.20 |
PL/SQL -1 (0) | 2021.01.20 |
복수행 함수 - 연산 함수와 그룹함수 (0) | 2021.01.15 |
일반 함수(nvl, nvl2, decode) (0) | 2021.01.15 |