7.04(목)
■GOTO문(잘만쓰면 좋은데 그렇게 선호하지는 않아)
- 코드내에 특정 레이블로 이동하는 문<<location>>
- 반복문 전에 반복문 대신 사용했던 문장.
- 구조적 프로그래밍을 위반하기때문에 권장하지 않아.
■PL/SQL의 SQL문
-SELECT이용해서 행 검색, DML문 사용하여 행 조작, commit/rollback/savepoint 사용하여 transaction 제어 가능
■ SQL CURSOR(커서)
- CURSOR는 SQL문을 실행하는 메모리 영역
- 암시적 커서와 명시적 커서가 있어
■implicit cursor(암시적 커서)
- SELECT ..INTO
- 반드시 1개 행만 fetch해야 한다.(단일행 결과만 가능)
- 결과가 2개 이상이면 명시적 커서를 이용해야한다.
# 암시적 커서에 대한 SQL 커서 속성
1. SQL%ROWCOUNT : 가장 최근의 DML문의 의해 영향을 받은 행의 수를 리턴해주는 값
2.SQL%FOUND : 가장 최근의 DML문에 의해 영향을 받은 행이 있으면 TRUE 없으면 FALSE로 평가되는 부울 속성
◎ %type
: 손쉽게 컬럼의 타입을 제공받는 방법
v_id hr.employees.employee_id%type; -- %type:타입과 속성을 그대로 받겠어
v_fname v_lname%type; --이전에 선언한 변수의 타입과 속성을 그대로 받겠어
var b_avg_sal number
--bind변수 사용하기(현장에서는 전부다 변수처리로 돼 있다.)
--bind변수를 쓴 이유: 프로그램 안에서 값을 받아서 프로그램이 끝나더라도 바깥쪽에서 사용할 수 있는 기능을 모색하기 위해서 사용.
var b_id number
var b_name varchar2(30)
var b_day varchar2(30)
execute :b_id := 1
execute :b_name := 'scott'
execute :b_day := '2024-07-04'
BEGIN
INSERT INTO hr.test(id,name,day)
VALUES(:b_id,:b_name,to_date(:b_day,'yyyy-mm-dd'));
END;
/
--PL/SQL에서 그룹함수 사용하기
전체 사원에 대한 평균 그룹함수는 프로시저에서는 불가능하지만 PLSQL에선 가능하다.
BEGIN
SELECT round(avg(salary),2)
INTO :b_avg_sal --프로그램 호출 끝나더라도 바깥에서 쓰고싶어서 bind변수처리해보자
FROM hr.employees;
dbms_output.put_line('전체 사원의 평균 급여'||:b_avg_sal);
END;
/
print :b_avg_sal
SELECT * FROM hr.employees WHERE salary > :b_avg_sal;
--INSERT SUBQUERY해보자.
BEGIN
INSERT INTO hr.test(id,name,day)
SELECT employee_id, last_name, hire_date
FROM hr.employees;
dbms_output.put_line(sql%rowcount||' row created');
END;
/
PL/SQL 요약정리
■조건제어문
- boolean data type
- IF 문
- CASE 표현식
- CASE문
※ CASE문과 CASE표현식의 차이
- CASE 표현식은 조건을 평가하여 값을 반환한다.(함수처럼 값만 반환)
CASE로 시작 END;로 끝
- CASE 문은 조건을 평가하여 작업을(SQL, 로직구현) 수행한다.(SQL문을 사용할 수 있다) -PS/SQL에서만 구현
CASE로 시작 END CASE;로 끝
■반복문
반복문(LOOP)은 명령문이나 명령문 시퀀스를 여러번 반복한다.
1. LOOP문(기본 LOOP 문)
2. WHILE LOOP문
# CONTINUE
3. 3. FOR LOOP문
'일기' 카테고리의 다른 글
24.07.08(월) index by table연관배열/ 행레벨INSERT/행레벨UPDATE (0) | 2024.07.10 |
---|---|
24.07.05(금) PL/SQL 암시적커서/ 커서 속성/ PL/SQL로 INSERT, UPDATE, DELETE (0) | 2024.07.10 |
24.07.03(수) PL/SQL IF문/CASE문/CASE표현식/LOOP/WHILE LOOP/ FOR LOOP (0) | 2024.07.03 |
24.07.02(화) PL/SQL 수업 요약 PL/SQL뜻 / 익명블록구조/ bind변수 /변수/PL/SQL의 SQL함수 (1) | 2024.07.03 |
24.06.28(금) 수업 요약 COMMENT / WITH / TOP-N / listagg (0) | 2024.07.01 |