일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- java
- Oracle
- codeigniter
- 주식
- 코드이그나이터
- 리눅스
- 7월 공모주 청약 일정
- linux
- JavaScript
- SQL
- 제이쿼리
- jquery
- 6월 공모주 청약 일정
- IPO
- MYSQL
- Eclipse
- 공모주 청약 일정
- css
- 공모주
- 오라클
- php
- 주식 청약
- 자바스크립트
- Stock ipo
- 맥
- html
- 자바
- 주식 청약 일정
- Stock
- 공모주 청약
- Today
- Total
개발자의 끄적끄적
[DB]PL/SQL 프로시저 기초-기본 문법 1 [펌] 본문
[DB]PL/SQL 프로시저 기초-기본 문법 1 [펌]
스칼라 변수
-
SQL 자료형과 비슷하게 선언하는 것을 스칼라 변수
-
주요 자료형 :NUMBER,CHAR,VARCHAR2,DATE,TIMESTAMP
ex)
v_empno number(4) := 100; v_ename varchar2(20) :='lks';
레퍼런스 변수
-
DB 테이블의 특정 칼럼으로 변수 타입을 지정할때 사용
-
변수이름 테이블이름.컬럼이름%TYPE;
-
테이블에서 컬럼의 자료형이 변경되더라도, PL/SQL에서의 변수 선언부분을 수정할 필요가 없다는 장점이 있다.
deptno emp.deptno%type; job emp.job%type;
DML 명령 사용하기
-
PL/SQL에서 select 문 사용에는 INTO가 필요하다.
-
INTO 절에는 select문에서 조회한 데이터를 저장할 변수를 기술한다.
-
select 결과의 컬럼과 INTO 절의 변수가 1:1 일치해야만 함
-
하나의 행만 저장할 수 있다.
-
결과는 메모리에 저장되서 사용할 수 있다.
declare
--스칼라 타입 변수 선언
v_empno number(4) := 100;
v_ename varchar2(20) :='lks';
--특정 칼럼의 레퍼런스 타입 선언
v_deptno emp.deptno%type;
v_job emp.job%type;
begin
--select한 결과를 저장 명령어 : into
select empno, ename, deptno, job
into v_empno, v_ename, v_deptno, v_job
from emp
where empno = 7876;
dbms_output.put_line('번호 : ' || v_empno);
dbms_output.put_line('이름 : ' || v_ename);
dbms_output.put_line('부서 : ' || v_deptno);
dbms_output.put_line('직책 : ' || v_job);
end;
기본 문법
CREATE OR REPLACE PROCEDURE 프로시저이름 IS
--프로시저 내에서 사용할 변수
변수이름 데이터타입;
변수이름 데이터타입;
BEGIN
기능 구현,처리 작성;
END;
다음은 기본 프로시저의 예제입니다.
create or replace PROCEDURE EM_TEST
IS
START_MESSAGE VARCHAR2(100) := '------test_START----------';
END_MESSAGE VARCHAR2(100) := '-------test_END------------';
BEGIN
DBMS_OUTPUT.PUT_LINE(START_MESSAGE);
DBMS_OUTPUT.PUT_LINE(END_MESSAGE);
END;
조건문 (IF문)
* 사용문법
IF 조건 THEN
작업처리;
ELSEIF 조건 THEN
작업처리;
ELSE
작업처리;
END IF;
다음은 IF문이 포함된 프로시저의 예제입니다.
create or replace PROCEDURE IF_TEST
IS
START_MESSAGE VARCHAR2(100) := '------test_START----------';
END_MESSAGE VARCHAR2(100) := '-------test_END------------';
ERR_MESSAGE VARCHAR2(100) := '----ERROR------';
EMPNO_SYS NUMBER(4,0);
ENAME_SYS VARCHAR2(10);
START_STATE VARCHAR2(1) := '0';
BEGIN
DBMS_OUTPUT.PUT_LINE(START_MESSAGE);
IF START_STATE IS NOT NULL AND START_STATE = '0' THEN
BEGIN
SELECT EMPNO, ENAME
INTO EMPNO_SYS, ENAME_SYS
FROM EMP
WHERE ENAME = 'KING';
END;
ELSEIF START_STATE IS NOT NULL AND START_STATE = '1' THEN
BEGIN
SELECT EMPNO, ENAME
INTO EMPNO_SYS, ENAME_SYS
FROM EMP
WHERE ENAME = 'JONES';
END;
ELSE
BEGIN
SELECT EMPNO, ENAME
INTO EMPNO_SYS, ENAME_SYS
FROM EMP
WHERE ENAME = 'JONES';
END;
END IF;
DBMS_OUTPUT.PUT_LINE('ENPNO: ' || EMPNO_SYS);
DBMS_OUTPUT.PUT_LINE('ENAME: ' || ENAME_SYS);
DBMS_OUTPUT.PUT_LINE(END_MESSAGE);
END;
출력
------test_START----------
ENPNO: 7566
ENAME: KING
-------test_END------------
LOOP 반복문
* 사용문법
LOOP
반복할 작업 처리 내용
EXIT WHEN [끝낼 조건]; END LOOP;
다음은 LOOP가 포함 된 프로시저의 예제입니다.
create or replace PROCEDURE LOOP_TEST
IS
START_MESSAGE VARCHAR2(100) := '------test_START----------';
END_MESSAGE VARCHAR2(100) := '-------test_END------------';
TEST_NUM NUMBER := 1;
BEGIN
DBMS_OUTPUT.PUT_LINE(START_MESSAGE);
LOOP
EXIT WHEN TEST_NUM >10;
DBMS_OUTPUT.PUT_LINE(TEST_NUM);
TEST_NUM := TEST_NUM +1;
END LOOP;
DBMS_OUTPUT.PUT_LINE(END_MESSAGE);
END;
출력
------test_START----------
1
2
3
4
5
6
7
8
9
10
-------test_END------------
WHILE 반복문
* 사용문법
WHILE 조건 LOOP
처리 내용
END LOOP;
create or replace PROCEDURE WHILE_TEST
IS
START_MESSAGE VARCHAR2(100) := '------test_START----------';
END_MESSAGE VARCHAR2(100) := '-------test_END------------';
TEST_NUM NUMBER := 1;
START_STATE VARCHAR2(1) := '0';
BEGIN
DBMS_OUTPUT.PUT_LINE(START_MESSAGE);
WHILE TEST_NUM <10 LOOP
DBMS_OUTPUT.PUT_LINE(TEST_NUM);
TEST_NUM := TEST_NUM +1;
END LOOP;
DBMS_OUTPUT.PUT_LINE(END_MESSAGE);
END;
출력
------test_START----------
1
2
3
4
5
6
7
8
9
-------test_END------------
'개발 > sql' 카테고리의 다른 글
[sql/tool] DBeaver 설치부터 연결, 사용법까지 [펌] (0) | 2020.09.24 |
---|---|
[sql/tool] DBeaver: Client home is not specified for connection [펌] (0) | 2020.09.23 |
[Oracle] 오라클 프로시저(Procedure) 생성 및 실행 (PL/SQL) [펌] (0) | 2020.09.21 |
[sql/oracle] 오라클 MERGE INTO 문으로 있으면 UPDATE 없으면 INSERT 한번에 수행하기 [펌] (0) | 2020.09.20 |
[sql] PostgreSQL 설치 및 여러가지 사용법 [펌] (0) | 2020.09.18 |