차근차근/Oracle

PL/SQL 변수선언 %type

예쁜꽃이피었으면 2021. 12. 13. 14:26

PROCEDURE 에 IS와 BEGIN사이에 선언되어 있는 변수에

%type이 있는 것을 보고 찾아보았다.

 

우선 %type이 적힌 위치가 내가 보고있는 코드에서는 IS 아래 있었고 

인터넷에서 본 예제에는 DECLARE아래 있어서

이 둘의 차이가 궁금해졌다.

 

1. PL/SQL에서 IS와 DECLARE의 차이

http://www.gurubee.net/article/54000

 

변수부에서 IS 와 DECLARE 차이가 뭔가요?

pl sql에서변수부에서  IS  와 DECLARE 차이가 뭔가요?^^

www.gurubee.net

PL/SQL에서는 블럭 단위로 변수선언, 로직처리, 에러처리가 가능하다.

하나의 블럭은 Declare, Begin, Exception, End로 구성된다. 블럭은 중첩하여 다른 블럭을 포함할 수 있다.

Declare는 PL/SQL블럭의 시작을 의미한다. 생략시에는 Begin이 블럭의 시작이 된다.

Begin ~ End는 단순히 PL/SQL언어에서의 블럭을 의미하고

IS는 PL/SQL을 이용해 작성되는 프로시저나 펑션에서 사용되는 것이다.

IS는 프로시저의 시작을 의미하고 IS부분에서 변수를 선언한다.

IS가 Declare의 역할을 대신하고 있으므로 IS가 있을 때는 Declare를 사용하지 않는다.

IS 다음에 Begin ~ End가 온다.

 

 

DECLARE : 저장되지 않는 PL/SQL => 1회용

IS : 저장되는 PL/SQL => 재활용 가능

 

 

https://pgnt.tistory.com/13

 

[SQL] 프로시져와 declare

초보개발자가 정리한 노트입니다. 오답이 있을 수 있으니 참고만 하여주시고 틀린것이있으면 댓글 부탁드립니다. PL/SQL procedure(프로시져)와의 차이점은 procedure는 이름을 저장하여 나중에도 사

pgnt.tistory.com

DECLARE는 한 번 실행 후 소멸한다.


https://goddaehee.tistory.com/99

 

[Oracle] PL/SQL 기초 (정의, 특징, 사용방법, 변수선언 방법)

[Oracle] PL/SQL 기초 (정의, 특징, 사용방법, 변수선언 방법) 안녕하세요. 갓대희 입니다. 이번 포스팅은 [PL/SQL 기초] 입니다. :) ▶ PL/SQL (Procedural Language extension to SQL)  - SQL을 확장한 절..

goddaehee.tistory.com

이 곳에 적힌 변수 선언에 대해 보자면

변수선언은 블록내에서 변수를 사용하려면 선언부(Declare)에서 선언해야 하며 변수명 다음에 데이터 타입을 기술해야 한다.

 

- 문법

identifier [CONSTANT] datatype [NOT NULL] [:=|DEFAULT expression];

 

identifier       변수명(식별자)

CONSTANT    상수로 지정 (초기치를 반드시 할당해야함)

datatype       자료형을 기술

NOT NULL     값을 반드시 포함

expression     Literal, 다른 변수, 연산자나 함수를 포함하는 표현식

 

변수선언 1) 변수를 한번에 여러개 선언

DECLARE 
     NAME    VARCHAR2(20);
     AGE      NUMBER(2); 
     GENDER VARCHAR(50)   DEFAULT '남';

 

변수선언 2) 변수선언하여 사용

DECLARE NAME VARCHAR2(20) := '이효리';
BEGIN
     DBMS_OUTPUT.put_Line('이효리'|| NAME); -- 출력
END;

 

변수 Type을 명시적으로 작성하지 않는 방법 3-1) %ROWTYPE

- 해당 테이블이나 뷰의 컬럼 속성을 그대로 들고오는 형태

- 사용방법 : 변수명 테이블이름%ROWTYPE

DECLARE 
     DATA EMP%ROWTYPE;
BEGIN
     SELECT  * INTO DATA 
     FROM  EMP 
     WHERE  EMPNO = '1234';
     DBMS_OUTPUT.PUT_LINE(DATA.ENAME ||','||DATA.DEPTNO);
END;

 

변수 Type을 명시적으로 작성하지 않는 방법 3-2) %TYPE

- 해당 테이블의 컬럼 속성을 지정하여 그대로 들고오는 형태

- 사용방법 : 변수명 테이블이름.컬럼명%TYPE

DECLARE 
     V_ENAME  EMP.ENAME%TYPE;
     V_DEPTNO EMP.DEPTNO%TYPE;
BEGIN
     SELECT  ENAME, DEPTNO INTO V_ENAME, V_DEPTNO
     FROM  EMP 
     WHERE  EMPNO = '1234';
     DBMS_OUTPUT.PUT_LINE(V_ENAME ||','||V_DEPTNO);
END;

 

반응형

'차근차근 > Oracle' 카테고리의 다른 글

PL/SQL - 커서(CORSOR)  (0) 2021.12.13
PL/SQL기초  (0) 2021.12.13
DBMS_OUTPUT.PUT_LINE  (0) 2021.12.13
오라클 DUAL테이블 (가상테이블)  (0) 2021.12.10
오라클 반복문(3) - LOOP , WHILE , FOR,CONTINUE  (0) 2021.12.10