일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 고전역학
- 소프트웨어공학
- 자바네트워크
- 코틀린
- write by chatGPT
- 인프라
- JVM
- android
- GIT
- 웹 크롤링
- Java
- 자바
- write by GPT-4
- lombok
- chatGPT's answer
- 시스템
- oracle
- 자바암호
- kotlin
- python
- Spring boot
- flet
- 유닉스
- GPT-4's answer
- 리눅스
- NIO
- Database
- 뉴턴역학
- 파이썬
- 역학
- Today
- Total
Akashic Records
Oracle User Defined Object을 이용한 Table Return Function 본문
Oracle User Defined Object을 이용한 Table Return Function
Andrew's Akashic Records 2018. 4. 17. 15:30아래와 같은 Query을 Function으로 만들어서 Return 해야 한다면 일반적인 oracle datatype으로는 Table 형태의 결과를 Return 할 수 없고 User Defined Object을 생성하여사용하면 된다.
select d.DEPTNO, d.DNAME, e.EMPNO, e.ENAME from dept d, emp e where d.DEPTNO = e.DEPTNO |
실행결과(간략)
DEPTNO | DNAME | EMPNO | ENAME |
20 | RESEARCH | 7369 | SMITH |
30 | SALES | 7499 | ALLEN |
30 | SALES | 7521 | WARD |
20 | RESEARCH | 7566 | JONES |
30 | SALES | 7654 | MARTIN |
먼저 User Defined Object을 생성한다.
CREATE OR REPLACE TYPE deptUser AS OBJECT ( deptno number(2), deptname varchar(14), empno number(4), ename varchar(10) ); |
다음으로 Function에서 Return Type으로 사용할 User Defined Table을 생성한다.
CREATE OR REPLACE TYPE deptUserTable AS TABLE OF deptUser; |
Oracle Function을 만든다.
CREATE OR REPLACE FUNCTION f_deptUserList RETURN deptUserTable PIPELINED is begin declare Type deptuserrecord_type is RECORD( v_deptno dept.DEPTNO%type, v_dname dept.DNAME%type, v_empno emp.EMPNO%type, v_ename emp.ENAME%type );
deptuserrecord deptuserrecord_type;
cursor deptusercursor is select d.DEPTNO, d.DNAME, e.EMPNO, e.ENAME from dept d, emp e where d.DEPTNO = e.DEPTNO;
begin
OPEN deptusercursor;
LOOP FETCH deptusercursor into deptuserrecord; EXIT WHEN deptusercursor%NOTFOUND; PIPE ROW ( deptUser( deptuserrecord.v_deptno, deptuserrecord.v_dname, deptuserrecord.v_empno, deptuserrecord.v_ename ) );
END LOOP; CLOSE deptusercursor; RETURN; end; end; |
실행 Query
select * from table(f_deptUserList); |
실행 결과(간략)
DEPTNO | DEPTNAME | EMPNO | ENAME |
20 | RESEARCH | 7369 | SMITH |
30 | SALES | 7499 | ALLEN |
30 | SALES | 7521 | WARD |
20 | RESEARCH | 7566 | JONES |
30 | SALES | 7654 | MARTIN |
'오래된글 > DataBase' 카테고리의 다른 글
PLT 1.3 롤백 세그먼트 (ROLLBACK SEGMENTS) (0) | 2018.04.17 |
---|---|
PLT 1.2 리두 로그 파일(Redo Log Files) (0) | 2018.04.17 |
Oracle 중요 Hint (0) | 2018.04.17 |
MongoDB, mogo Shell (0) | 2018.04.17 |
MongoDB, 설치와 간단 사용법 (0) | 2018.04.17 |