본문 바로가기
🖥Web/🔥DB & SQL

[SQL] 프로시저(procedure)와 declare 차이

by 후누스 토르발즈 2020. 3. 20.
반응형

프로시저(procedure)와 declare 차이

PL/SQL

  1. declare 변수 선언
  2. 프로시저

 

PL/SQL

procedure(프로시저)와의 차이점은 procedure는 이름을 저장하여 나중에도 사용할 수 있지만

declare는 한번 실행 후 소멸한다는 점이다.

 

디클리어 만드는 방법

declare
 v_no number(5);
begin
 v_no:=10;--변수초기화
 dbms_output.put_line('v_no = '|| v_no);
end;

 

PL/SQL의 결과는 하단의 DBMS Output(disabled)에서 확인할 수 있다.

출력정보가 쌓이기때문에  DBMS Output(disabled) 에서 새페이지를 눌러주는것이 좋다.

 

declare
 v_no number(5);
 v_name VARCHAR(20);
begin
 v_no:=10;--변수초기화
 v_name:='김유신';
 dbms_output.put_line('사원번호                   사원이름');
 dbms_output.put_line('------------------------------');
 dbms_output.put_line('v_no = '||v_no||'     '||v_name);
end;

결과값 : 

사원번호                   사원이름
------------------------------
v_no = 10사원번호                   사원이름
------------------------------
v_no = 10     김유신
declare
 v_no number(5);
 v_name VARCHAR(20);
 cday VARCHAR(20);
begin
 v_no:=10;--변수초기화
 v_name:='김유신';
 cday:= TO_CHAR(sysdate, 'YYYY-MM-DD');
 dbms_output.put_line('사원번호                   사원이름');
 dbms_output.put_line('------------------------------');
 dbms_output.put_line('v_no = '||v_no||'     '||v_name);
 dbms_output.put_line(cday);
end;

또는

declare
 v_no number(5);
 v_name VARCHAR(20);
 cday varchar2(30);
begin
 v_no:=10;--변수초기화
 v_name:='김유신';
 dbms_output.put_line('사원번호                   사원이름');
 dbms_output.put_line('------------------------------');
 dbms_output.put_line('v_no = '||v_no||'     '||v_name);
 SELECT TO_CHAR(sysdate, 'YYYY-MM-DD') INTO cday FROM dual;
 dbms_output.put_line(cday);
end;

의 결과값은 

사원번호                   사원이름
------------------------------
v_no = 10     김유신
2020-03-19

이다.

SELECT TO_CHAR(sysdate, 'YYYY-MM-DD') INTO cday FROM dual;

의 경우 저장프로시저 안에서만 사용이 가능하다.

하지만

PL/SQL에는 변수에 바로 대입하여 출력이 가능하다

 

프로시저

상단의 declare를 is로 바꾸고 최상단에

CREATE OR REPLACE procedure proc_variable(msg IN varchar2)

를 붙이면프로시저를 만들 수 있게 된다.

(OR REPLACE가 없으면 수정이 불가하다.)

 

CREATE OR REPLACE procedure proc_variable(msg OUT varchar2)
is
 v_no number(5);
 v_name VARCHAR(20);
 cday varchar2(30);
begin
 v_no:=10;--변수초기화
 v_name:='김유신';
 dbms_output.put_line('사원번호                   사원이름');
 dbms_output.put_line('------------------------------');
 dbms_output.put_line('v_no = '||v_no||'     '||v_name);
 SELECT TO_CHAR(sysdate, 'YYYY-MM-DD') INTO cday FROM dual;
 dbms_output.put_line(cday);
end;

msg 값 확인방법은

SQL> variable msg varchar2(30);
SQL> exec proc_variable(:msg);
SQL> print msg

0부터 10까지의 짝수의 합 구하기

CREATE OR REPLACE procedure proc_hap(tot OUT number)
is
  i number(5);
begin
  i :=0;
  tot :=0;
  LOOP
    i:= i+1;
    IF MOD(i,2)=0 THEN
    tot:=tot+i;
    END IF;
    EXIT WHEN i=10;
  END LOOP;
end;

 

반응형

'🖥Web > 🔥DB & SQL' 카테고리의 다른 글

[Sql] SQL Cursor  (0) 2020.03.20
[SQL] SQL의 예외처리  (0) 2020.03.20
[SQL] 프로토콜에서 procedure 생성  (0) 2020.03.17
[SQL]MySql - 2 고급  (0) 2020.01.05
[SQL]MySql - 1 초급  (0) 2020.01.05