Top 36 오라클 커서 All Answers

You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 오라클 커서 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://toplist.maxfit.vn team, along with other related topics such as: 오라클 커서 오라클 커서 사용 이유, 오라클 동적쿼리 커서, 오라클 커서 조회, 오라클 커서 정리, 오라클 커서 오류, 오라클 커서 SELECT, 오라클 커서 예외처리, 오라클 커서 ROWCOUNT


이것이 오라클이다 – 10장 4교시 : [Oracle] 커서, 패키
이것이 오라클이다 – 10장 4교시 : [Oracle] 커서, 패키


[Oracle] 오라클 커서 사용법 & 예제 (PL/SQL)

  • Article author: coding-factory.tistory.com
  • Reviews from users: 20501 ⭐ Ratings
  • Top rated: 4.3 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [Oracle] 오라클 커서 사용법 & 예제 (PL/SQL) 커서란? 커서란 특정 SQL 문장을 처리한 결과를 담고있는 메모리 영역을 가리키는 일종의 포인터입니다. 대부분의 SQL문 결과 ROW는 여러개인데 커서 … …
  • Most searched keywords: Whether you are looking for [Oracle] 오라클 커서 사용법 & 예제 (PL/SQL) 커서란? 커서란 특정 SQL 문장을 처리한 결과를 담고있는 메모리 영역을 가리키는 일종의 포인터입니다. 대부분의 SQL문 결과 ROW는 여러개인데 커서 …  커서란? 커서란 특정 SQL 문장을 처리한 결과를 담고있는 메모리 영역을 가리키는 일종의 포인터입니다. 대부분의 SQL문 결과 ROW는 여러개인데 커서를 사용하면 이 ROW에 순차적으로 접근이 가능합니다. 커서의..
  • Table of Contents:

Header Menu

Main Menu

커서란

커서를 만드는 단계

커서 사용예제

Sidebar – Right

Copyright © 코딩팩토리 All Rights Reserved

Designed by JB FACTORY

티스토리툴바

[Oracle] 오라클 커서 사용법 & 예제 (PL/SQL)
[Oracle] 오라클 커서 사용법 & 예제 (PL/SQL)

Read More

실무에 사용 되는 오라클 커서 (CURSOR) 사용법

  • Article author: fsl-dev.tistory.com
  • Reviews from users: 17762 ⭐ Ratings
  • Top rated: 4.3 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 실무에 사용 되는 오라클 커서 (CURSOR) 사용법 – 커서를 짧고 간략하게 설명 하면 “SQL문을 처리한 결과 집합을 가리키는 포인터이다.” 이걸 약간 더 길게 설명 하면 SQL 처리 결과 를 오라클 서버 … …
  • Most searched keywords: Whether you are looking for 실무에 사용 되는 오라클 커서 (CURSOR) 사용법 – 커서를 짧고 간략하게 설명 하면 “SQL문을 처리한 결과 집합을 가리키는 포인터이다.” 이걸 약간 더 길게 설명 하면 SQL 처리 결과 를 오라클 서버 … 1) 정의 – 커서를 짧고 간략하게 설명 하면 “SQL문을 처리한 결과 집합을 가리키는 포인터이다.”  이걸 약간 더 길게 설명 하면 SQL 처리 결과 를 오라클 서버 프로세스 내부의 Private SQL Area 라는 메모리 영..
  • Table of Contents:

태그

‘Dev StoryDB’ Related Articles

티스토리툴바

실무에 사용 되는 오라클 커서 (CURSOR) 사용법
실무에 사용 되는 오라클 커서 (CURSOR) 사용법

Read More

오라클 커서를 사용하는 다양한 방법 :: 훈마로의 보물창고

  • Article author: hoonmaro.tistory.com
  • Reviews from users: 34453 ⭐ Ratings
  • Top rated: 3.6 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 오라클 커서를 사용하는 다양한 방법 :: 훈마로의 보물창고 커서는 SELECT문 또는 DML문 처리에 대한 정보를 저장하는 전용 SQL 메모리 영역에 대한 포인터이다. DML문의 커서 관리는 오라클 데이터베이스에서 처리 … …
  • Most searched keywords: Whether you are looking for 오라클 커서를 사용하는 다양한 방법 :: 훈마로의 보물창고 커서는 SELECT문 또는 DML문 처리에 대한 정보를 저장하는 전용 SQL 메모리 영역에 대한 포인터이다. DML문의 커서 관리는 오라클 데이터베이스에서 처리 … 오라클 커서(Cursor) 기본 문법 DECLARE CURSUR [커서이름] IS [SELECT 문]; BEGIN OPEN [커서이름]; FETCH [커서이름] INTO [변수]; CLOSE [커서이름]; END; 예제 준비 https://livesql.oracle.com 오라클 아이디..가치를 만드는 개발자
  • Table of Contents:

오라클 커서를 사용하는 다양한 방법

기본 문법

예제 준비

오라클 커서란

적절한 방법 선택

참고

티스토리툴바

오라클 커서를 사용하는 다양한 방법 :: 훈마로의 보물창고
오라클 커서를 사용하는 다양한 방법 :: 훈마로의 보물창고

Read More

[Oracle] PL/SQL 기초3 – 커서

  • Article author: goddaehee.tistory.com
  • Reviews from users: 5719 ⭐ Ratings
  • Top rated: 4.1 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [Oracle] PL/SQL 기초3 – 커서 개인적으론 PL / SQL 의 꽃은 “커서”가 아닐까 생각합니다. 커서 (CURSOR). [정의]. – SQL 커서는 Oracle 서버에서 할당한 전용 메모리 영역에 대한 … …
  • Most searched keywords: Whether you are looking for [Oracle] PL/SQL 기초3 – 커서 개인적으론 PL / SQL 의 꽃은 “커서”가 아닐까 생각합니다. 커서 (CURSOR). [정의]. – SQL 커서는 Oracle 서버에서 할당한 전용 메모리 영역에 대한 …  [Oracle] PL/SQL 기초3 – 커서 (CURSOR) 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ PL / SQL 커서 ] 입니다. : ) 개인적으론 PL / SQL 의 꽃은 “커서”가 아닐까 생각합니다. 커서 (CURSOR) [정의]  – SQL..
  • Table of Contents:

태그

관련글

댓글6

공지사항

최근글

인기글

최근댓글

태그

전체 방문자

티스토리툴바

[Oracle] PL/SQL 기초3 - 커서
[Oracle] PL/SQL 기초3 – 커서

Read More

[ORACLE] CURSOR 사용법과 간단한 예제

  • Article author: itteamb.blogspot.com
  • Reviews from users: 33019 ⭐ Ratings
  • Top rated: 3.6 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [ORACLE] CURSOR 사용법과 간단한 예제 [ORACLE] CURSOR 사용법과 간단한 예제 … 변수는 커서와 커서가 가르키는 값을 담을 변수(SELECT 결과 행)가 필요합니다. DECLARE CURSOR “커서명” …
  • Most searched keywords: Whether you are looking for [ORACLE] CURSOR 사용법과 간단한 예제 [ORACLE] CURSOR 사용법과 간단한 예제 … 변수는 커서와 커서가 가르키는 값을 담을 변수(SELECT 결과 행)가 필요합니다. DECLARE CURSOR “커서명”
  • Table of Contents:
[ORACLE PROCEDURE] 오라클 프로시저 생성 및 호출 방법

[JavaScript] Object 객체의 Key Value 추출하기 – (Filter를 이용한 특정 Key 추출)

[C#] 파일이나 어셈블리 ~ 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드 할 수 없습니다 프로그램을 잘못된 형식으로 로드하려고 했습니다

[ORACLE] CURSOR 사용법과 간단한 예제
[ORACLE] CURSOR 사용법과 간단한 예제

Read More

ORACLE 커서(CURSOR) – (7) :: 악덕고용주의 개발 일기

  • Article author: rongscodinghistory.tistory.com
  • Reviews from users: 37716 ⭐ Ratings
  • Top rated: 4.3 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about ORACLE 커서(CURSOR) – (7) :: 악덕고용주의 개발 일기 9. 15. 16:31. [ ORACLE 커서(CURSOR) ]. [ 커서 ]. : select문을 통해 결과값들이 나올 때 이 결과들은 메모리 공간에 저장하게 되는데. …
  • Most searched keywords: Whether you are looking for ORACLE 커서(CURSOR) – (7) :: 악덕고용주의 개발 일기 9. 15. 16:31. [ ORACLE 커서(CURSOR) ]. [ 커서 ]. : select문을 통해 결과값들이 나올 때 이 결과들은 메모리 공간에 저장하게 되는데. [    ORACLE 커서(CURSOR) ]  [  커서  ] : select문을 통해 결과값들이 나올 때 이 결과들은 메모리 공간에 저장하게 되는데   이때, 이 메모리 공간을 “커서”라고 한다.   즉, – 커서란? : 쿼리문에 의..조금씩…꾸준히…
  • Table of Contents:

ORACLE 커서(CURSOR) – (7)

티스토리툴바

ORACLE 커서(CURSOR) - (7) :: 악덕고용주의 개발 일기
ORACLE 커서(CURSOR) – (7) :: 악덕고용주의 개발 일기

Read More

오라클 SQL과 PL/SQL을 다루는 기술: 4단계: 커서 닫기

  • Article author: thebook.io
  • Reviews from users: 2838 ⭐ Ratings
  • Top rated: 4.6 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 오라클 SQLê³¼ PL/SQL을 다루는 기술: 4단계: 커서 닫기 패치 작업이 끝나고 반복문을 빠져 나오면 커서 사용이 모두 끝났으므로 다음과 같이 반드시 … 사실 해당 프로시저가 종료되면 오라클은 커서를 자동으로 닫아 준다. …
  • Most searched keywords: Whether you are looking for 오라클 SQLê³¼ PL/SQL을 다루는 기술: 4단계: 커서 닫기 패치 작업이 끝나고 반복문을 빠져 나오면 커서 사용이 모두 끝났으므로 다음과 같이 반드시 … 사실 해당 프로시저가 종료되면 오라클은 커서를 자동으로 닫아 준다. 더북, TheBook, 오라클 SQLê³¼ PL/SQL을 다루는 기술: 4단계: 커서 닫기더북(TheBook): (주)도서출판 길벗에서 제공하는 IT 도서 열람 서비스입니다.
  • Table of Contents:
오라클 SQL과 PL/SQL을 다루는 기술: 4단계: 커서 닫기
오라클 SQL과 PL/SQL을 다루는 기술: 4단계: 커서 닫기

Read More

[Oracle] 프로시저(Procedure) 생성 및 커서(Cursor) 리턴 방법

  • Article author: gent.tistory.com
  • Reviews from users: 35510 ⭐ Ratings
  • Top rated: 4.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [Oracle] 프로시저(Procedure) 생성 및 커서(Cursor) 리턴 방법 오라클의 프로시저(Procedure)는 일련의 작업들을 하나로 묶어서 모듈화한 후 필요할 때 마다 호출하여 사용할 수 있는 기능이다. …
  • Most searched keywords: Whether you are looking for [Oracle] 프로시저(Procedure) 생성 및 커서(Cursor) 리턴 방법 오라클의 프로시저(Procedure)는 일련의 작업들을 하나로 묶어서 모듈화한 후 필요할 때 마다 호출하여 사용할 수 있는 기능이다. 오라클의 프로시저(Procedure)는 일련의 작업들을 하나로 묶어서 모듈화한 후 필요할 때 마다 호출하여 사용할 수 있는 기능이다. 함수(Function)와 비슷해 보이지만 프로시저는 리턴 값이 없다. (C언어의 void 함..
  • Table of Contents:

Header Menu

Main Menu

[Oracle] 프로시저(Procedure) 생성 및 커서(Cursor) 리턴 방법

프로시저 생성 예시

프로시저 실행 방법

‘데이터베이스오라클’ 관련 글

Sidebar – Right

Sidebar – Footer 1

Sidebar – Footer 2

Sidebar – Footer 3

Copyright © 젠트의 프로그래밍 세상 All Rights Reserved

Designed by JB FACTORY

[Oracle] 프로시저(Procedure) 생성 및 커서(Cursor) 리턴 방법
[Oracle] 프로시저(Procedure) 생성 및 커서(Cursor) 리턴 방법

Read More

[Oracle] PL/SQL – 커서(cursor)와 예외 처리 :: pridiot

  • Article author: pridiot.tistory.com
  • Reviews from users: 41813 ⭐ Ratings
  • Top rated: 3.3 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [Oracle] PL/SQL – 커서(cursor)와 예외 처리 :: pridiot 커서는 SQL문을 실행했을 때 해당 SQL문을 처리하는 정보를 저장한 메모리 공간을 의미한다. (메모리 공간은 Private SQL Area라고 부르며 커서는 이 … …
  • Most searched keywords: Whether you are looking for [Oracle] PL/SQL – 커서(cursor)와 예외 처리 :: pridiot 커서는 SQL문을 실행했을 때 해당 SQL문을 처리하는 정보를 저장한 메모리 공간을 의미한다. (메모리 공간은 Private SQL Area라고 부르며 커서는 이 … 공부했던 자료 정리하는 용도입니다. 재배포, 수정하지 마세요. 예제는 Oracle Database에서 기본으로 제공되는 SCOTT계정 데이터로 진행됩니다. 커서(cursor) 커서는 SQL문을 실행했을 때 해당 SQL문을 처리하는..정리조아
  • Table of Contents:
[Oracle] PLSQL – 커서(cursor)와 예외 처리

커서(cursor)

예외 처리

티스토리툴바

[Oracle] PL/SQL - 커서(cursor)와 예외 처리 :: pridiot
[Oracle] PL/SQL – 커서(cursor)와 예외 처리 :: pridiot

Read More

오라클 프로시저 커서 (CURSOR) 3가지 생성 방법.

  • Article author: blog.kjslab.com
  • Reviews from users: 19471 ⭐ Ratings
  • Top rated: 4.5 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 오라클 프로시저 커서 (CURSOR) 3가지 생성 방법. 커서의 내용을 미리 정의 해 놓고 사용하는 방법. DECLARE CURSOR C_LIST IS SELECT MY_ID FROM MY_TABLE WHERE 조건; BEGIN FOR I_ID IN C_LIST LOOP … …
  • Most searched keywords: Whether you are looking for 오라클 프로시저 커서 (CURSOR) 3가지 생성 방법. 커서의 내용을 미리 정의 해 놓고 사용하는 방법. DECLARE CURSOR C_LIST IS SELECT MY_ID FROM MY_TABLE WHERE 조건; BEGIN FOR I_ID IN C_LIST LOOP … 커서의 내용을 미리 정의 해 놓고 사용하는 방법. DECLARE CURSOR C_LIST IS SELECT MY_ID FROM MY_TABLE WHERE 조건; BEGIN FOR I_ID IN C_LIST LOOP DBMS_OUTPUT.put_line(I_ID); END LOOP; END; 비추천 커서의..
  • Table of Contents:

태그

관련글

댓글5

공지사항

최근글

인기글

최근댓글

태그

전체 방문자

티스토리툴바

오라클 프로시저 커서 (CURSOR) 3가지 생성 방법.
오라클 프로시저 커서 (CURSOR) 3가지 생성 방법.

Read More


See more articles in the same category here: toplist.maxfit.vn/blog.

[Oracle] 오라클 커서 사용법 & 예제 (PL/SQL)

커서란?

커서란 특정 SQL 문장을 처리한 결과를 담고있는 메모리 영역을 가리키는 일종의 포인터입니다. 대부분의 SQL문 결과 ROW는 여러개인데 커서를 사용하면 이 ROW에 순차적으로 접근이 가능합니다. 커서의 종류에는 묵시적 커서와 명시적 커서가 있습니다. 묵시적 커서는 오라클 내부에서 자동으로 생성되어 SQL문장이 실행될때마다 자동으로 만들어져 실행되는 커서이고, 명시적 커서는 사용자가 직접 정의해서 사용하는 커서를 말합니다. 이번 포스팅에서는 사용자가 직접 만드는 명시적 커서를 만들어보고 사용하는 방법에대해 알아보도록 하겠습니다.

커서를 만드는 단계

커서를 만드는 단계는 크게 커서 선언 -> 커서 열기 -> 패치 단계에서 커서 사용 -> 커서 닫기 크게 이렇게 4가지로 분류할 수 있습니다.

커서 선언

커서는 선언은 DECLEAR부분에 이름을 부여하면 됩니다.

CURSOR 커서명(매개변수1, 매개변수2…) IS SELECT문;

커서 열기

선언한 커서를 사용하려면 선언한 커서를 열어주는 작업이 필요합니다.

OPEN 커서명 (매개변수1, 매개변수2…);

커서 사용

정의한 커서를 열었으면 패치단계에서 커서를 사용하면 됩니다. 커서는 SQL 결과 집합이 여러개 이상에서 순차적으로 접근하기 위해 사용하는 방식이므로 거의 필수적으로 LOOP를 비롯한 반복문과 같이 사용하게됩니다.

LOOP FETCH 커서명 INTO 변수1, 변수2… EXIT WHEN 커서명%NOTFOUND; END LOOP;

커서 닫기

커서를 사용한 모든 동작이 끝났으면 커서를 닫아주어야 합니다.

CLOSE 커서명;

커서 사용 예제

DECLARE PRODUCT_ID varchar2(100); PRODUCT_NAME varchar2(100); CURSOR EX_CUR –커서 선언 IS SELECT PRODUCT_ID, PRODUCT_NAME FROM PRODUCTS; BEGIN OPEN EX_CUR;– 2. 명시적 커서 오픈 DBMS_OUTPUT.PUT_LINE(‘제품코드 제품명’); LOOP FETCH EX_CUR INTO PRODUCT_ID, PRODUCT_NAME; –커서에서 데이터 가져오기 EXIT WHEN EX_CUR %NOTFOUND; –커서가 없을 경우 종료 DBMS_OUTPUT.PUT_LINE(PRODUCT_ID||’ ‘||PRODUCT_NAME); END LOOP; CLOSE EX_CUR; –커서 닫기 END;

실무에 사용 되는 오라클 커서 (CURSOR) 사용법

1) 정의

– 커서를 짧고 간략하게 설명 하면 “SQL문을 처리한 결과 집합을 가리키는 포인터이다.”

이걸 약간 더 길게 설명 하면 SQL 처리 결과 를 오라클 서버 프로세스 내부의 Private SQL Area 라는

메모리 영역에 저장되는데 클라이언트 프로세스에서 포인터(커서)라 는 것이 가리키고 있다.

아래 두줄은 같은말 “

– 질의의 결과로 얻어진 여러 행이 저장된 메모리상의 위치.

– 커서는 SELECT 문의 결과 집합을 처리하는데 사용된다.

아래 그림은 위에 설명을 한 장의 이미지로 설명했다.

출처:https://bit.ly/2u5Cmvh

커서의 정의에 대해서 알아 보았으니 종류에 대해서 알아 보자. 종류로는 암시적, 명시적 커서로 나뉜다.

2) 암시적 커서

: 오라클 내부에서 PL_SQL(INSERT, UPDATE, DELETE 등등.) 실행시 자동으로 생성 되어 사용 되어진다.

이러한 커서를 아래와 같이 사용 할 수 있다.

함수로 치면 내장 함수라고 생각 하면 쉽게 이해 될듯 하다.

속성

– SQL%FOUND : 해당 SQL문에 의해 반환된 총 행수가 1개 이상일 경우TRUE (BOOLEAN)

– SQL%NOTFOUND : 해당 SQL문에 의해 반환된 총 행수가 없을 경우 TRUE (BOOLEAN)

– SQL%ISOPEN : 항상 FALSE, 암시적 커서가 열려 있는지의 여부 검색( PL/SQL은 실행 후 바로 묵시적 커서를 닫기 때문에 항상 상 false)

– SQL%ROWCOUNT : 해당 SQL문에 의해 반환된 총 행수, 가장 최근 수행된 SQL문에 의해 영향을 받은 행의 갯수(정수)

3) 명시적 커서

: 사용자가 직접 정의해서 사용 하는 커서를 말한다.

함수로 치면 외장 함수 쯤 된다. 개발자가 필요할때 새로 정의해서 사용 하는 커서

코드 작성법은 여러 방법이 있지만 아래 커서는 코딩언어 로 치면 지역변수 커서에 해당 한다.

해당 블록에 커서를 생성해서 지정된 코드블럭을 넘어 서게 되면 소멸 한다.

DECLARE BEGIN FOR ID_LIST IN ( SELECT ‘GOD’ AS USER_ID FROM DUAL ) LOOP DBMS_OUTPUT.putline(ID_LIST.USER_ID); END LOOP; END;

FOR LOOP가 자동적으로 커서를 OPEN해주며, 행이 없을 때까지 FETCH해주고, CLOSE해준다.

또한 ROWTYPE에 해당하는 변수를 따로 DECLARE할 필요가 없다.

이는 암시적으로 선언되기 때문이다.

“지역 변수가 아닌 전연 변수를 선언 할때”

– 다른 블록에서도 사용이 가능하고 얼마든지 재사용이 가능하다

– 한개 이상의 쿼리를 연결 해서 사용 할때

-변수처럼 커서 변수를 함수나 프로시저의 매개변수로 전달할 수 있다.

– 커서 속성을 사용 할 수 있다.

이 포인터(커서) 종류로는 강한 타입과 약한 타입의 커서 이고 언어코딩으로 설명하자면

int, string 을 명시적으로 정해서 입력해줘야 하는 타입이 “강한 타입” 이고

var 형태의 무기명 함수 처럼 형이 형을 지정 해주지 않아도 되는 타입이 “약한 타입” 이다.

강한타입 커서 사용법은 아래와 같고 자세한건 생략 하기로 한다.

이유는 아래 방식이 더 간단 하므로.

TYPE dep_curtype IS REF CURSOR RETURN department%ROWTYPE;

TYPE dep_curtype IS REF CURSOR;

3-1) 약한 타입인 SYS_REFCURSOR (빌트인 타입 이라고 불리는) 사용 법을 알아보자

DECLARE — 사원명을 받아오기 위한 변수 선언 vs_emp_name employees.emp_name%TYPE; — SYS_REFCURSOR 타입의 커서 변수 선언 emp_dep_curvar SYS_REFCURSOR; BEGIN — 커서 변수를 사용한 커서 정의 및 오픈 OPEN emp_dep_curvar FOR SELECT emp_name FROM employees WHERE department_id = 90; — LOOP문 LOOP — 커서 변수를 사용해 결과 집합을 vs_emp_name 변수에 할당 FETCH emp_dep_curvar INTO vs_emp_name; — 더 이상 패치된 참조 로우가 없으면 LOOP 탈출(커서 변수를 이용한 커서 속성 참조) EXIT WHEN emp_dep_curvar%NOTFOUND; — 사원명을 출력 DBMS_OUTPUT.PUT_LINE(vs_emp_name); END LOOP; END;

간단하고 실무에서 유용 하게 쓰이는 커서 사용 법에 대해 간략히 알아 보았다.

참고 사이트

https://goddaehee.tistory.com/117

https://gdtbgl93.tistory.com/152

반응형

오라클 커서를 사용하는 다양한 방법

오라클 커서(Cursor)

기본 문법

DECLARE CURSUR [커서이름] IS [SELECT 문]; BEGIN OPEN [커서이름]; FETCH [커서이름] INTO [변수]; CLOSE [커서이름]; END;

예제 준비

https://livesql.oracle.com

오라클 아이디로 로그인

SQL Worksheet 접속

OE(Order Entry) 스키마 활용

오라클 커서란

커서는 SELECT문 또는 DML문 처리에 대한 정보를 저장하는 전용 SQL 메모리 영역에 대한 포인터이다. DML문의 커서 관리는 오라클 데이터베이스에서 처리하지만, PL/SQL은 커서를 정의하고 조작하여 SELECT문을 실행하는 여러 방법을 제공한다.

일반적인 방법들은 다음과 같다.

SELECT-INTO 문

명시적 커서로부터 가져오기

커서 FOR 반복문 사용

동적 쿼리에 EXECUTE IMMEDAITE INTO 사용

커서 변수 사용

SELECT-INTO문

SELECT-INTO는 SELECT문에서 하나의 행을 가져오는 가장 빠르고 간단한 방법을 제공한다.

SELECT select_list INTO variable_list FROM remainder_of_query

remainder_of_query 에는 테이블 또는 뷰, WHERE 절, 기타 절이 포함된다. variable_list 의 수와 유형은 select_list 의 요소 수와 유형과 일치해야 한다.

SELECT문이 2개 이상의 행을 조회하면 TOO_MANY_ROWS 예외가 발생하고, 조회 데이터가 없으면 NO_DATA_FOUND 예외가 발생한다.

기본 예제

— * ORACLE Live SQL OE(Order Entry) 스키마를 활용한 SELECT INTO 커서 예제 — 카테고리 이름이 office1인 데이터의 카테고리 설명을 가져온다. DECLARE v_category_desc oe.categories_tab.category_description%TYPE; BEGIN SELECT category_description INTO v_category_desc FROM oe.categories_tab WHERE category_name = ‘office1’; DBMS_OUTPUT.put_line(v_category_desc); END; — > 결과: capitalizable assets (desks, chairs, phones …) — * NO_DATA_FOUND 예외 발생 예제 DECLARE v_category_desc oe.categories_tab.category_description%TYPE; BEGIN SELECT category_description INTO v_category_desc FROM oe.categories_tab WHERE category_name = ‘office0’; DBMS_OUTPUT.put_line(v_category_desc); END; — > 결과: ORA-01403: no data found ORA-06512: at line 4 — * TOO_MANY_ROWS 예외 발생 예제 DECLARE v_category_desc oe.categories_tab.category_description%TYPE; BEGIN SELECT category_description INTO v_category_desc FROM oe.categories_tab; DBMS_OUTPUT.put_line(v_category_desc); END; — > 결과: ORA-01422: exact fetch returns more than requested number of rows ORA-06512: at line 4

1행 전체를 SELECT INTO 예제

— CATEGORIES_TAB 테이블에서 카테고리 이름이 office1인 데이터의 행 전체을 가져온다. DECLARE v_category_tab oe.categories_tab%ROWTYPE; BEGIN SELECT * INTO v_category_tab FROM oe.categories_tab WHERE category_name = ‘office1’; DBMS_OUTPUT.put_line(v_category_tab.category_name); DBMS_OUTPUT.put_line(v_category_tab.category_description); END; — > 결과 /* office1 capitalizable assets (desks, chairs, phones …) */

두 변수, 두 테이블 예제

— 상품과 카테고리 테이블을 조인하여 상품 아이디 1797 데이터와 그 카테고리의 특정 정보를 조회한다. DECLARE v_category_id oe.categories_tab.category_id%TYPE; v_category_name oe.categories_tab.category_name%TYPE; v_product_id oe.product_information.product_id%TYPE; v_product_name oe.product_information.product_name%TYPE; BEGIN SELECT c.category_id, c.category_name, p.product_id , p.product_name INTO v_category_id, v_category_name, v_product_id, v_product_name FROM oe.categories_tab c JOIN oe.product_information p ON c.category_id = p.category_id WHERE p.product_id = ‘1797’; DBMS_OUTPUT.put_line( ‘PRODUCT[‘ || v_product_id || ‘]’ || v_product_name || ‘ belongs to CATEGORY[‘ || v_category_id || ‘] ‘ || v_category_name ); END; — > 결과: PRODUCT[1797] “Inkjet C/8/HQ” belongs to CATEGORY[12] “hardware2”

SELECT INTO 예외

ORA-00947 not enough values: SELECT 조회 결과 컬럼 수보다 변수가 적음 ORA-00913 too many values: SELECT 조회 결과 컬럼 수보다 변수가 많음 ORA-06502 PL/SQL: numeric or value error: SELECT 조회 결과 컬럼과 변수의 자료형이 맞지 않음

— PL/SQL: ORA-00947: not enough values DECLARE v_category_id oe.categories_tab.category_id%TYPE; v_category_name oe.categories_tab.category_name%TYPE; v_product_id oe.product_information.product_id%TYPE; v_product_name oe.product_information.product_name%TYPE; BEGIN SELECT c.category_id, c.category_name, p.product_id , p.product_name INTO v_category_id, v_category_name, v_product_id FROM oe.categories_tab c JOIN oe.product_information p ON c.category_id = p.category_id WHERE p.product_id = ‘1797’; DBMS_OUTPUT.put_line( ‘PRODUCT[‘ || v_product_id || ‘] “‘ || v_product_name || ‘” belongs to CATEGORY[‘ || v_category_id || ‘] “‘ || v_category_name || ‘”‘ ); END; — PL/SQL: ORA-00913: too many values DECLARE v_category_id oe.categories_tab.category_id%TYPE; v_category_name oe.categories_tab.category_name%TYPE; v_product_id oe.product_information.product_id%TYPE; v_product_name oe.product_information.product_name%TYPE; v_add_one VARCHAR2(10 Char); BEGIN SELECT c.category_id, c.category_name, p.product_id , p.product_name INTO v_category_id, v_category_name, v_product_id, v_product_name, v_add_one FROM oe.categories_tab c JOIN oe.product_information p ON c.category_id = p.category_id WHERE p.product_id = ‘1797’; DBMS_OUTPUT.put_line( ‘PRODUCT[‘ || v_product_id || ‘] “‘ || v_product_name || ‘” belongs to CATEGORY[‘ || v_category_id || ‘] “‘ || v_category_name || ‘”‘ ); END; — ORA-06502: PL/SQL: numeric or value error: character to number conversion error DECLARE v_category_id oe.categories_tab.category_id%TYPE; v_category_name oe.categories_tab.category_name%TYPE; v_product_id oe.product_information.product_id%TYPE; v_product_name NUMBER; BEGIN SELECT c.category_id, c.category_name, p.product_id , p.product_name INTO v_category_id, v_category_name, v_product_id, v_product_name FROM oe.categories_tab c JOIN oe.product_information p ON c.category_id = p.category_id WHERE p.product_id = ‘1797’; DBMS_OUTPUT.put_line( ‘PRODUCT[‘ || v_product_id || ‘] “‘ || v_product_name || ‘” belongs to CATEGORY[‘ || v_category_id || ‘] “‘ || v_category_name || ‘”‘ ); END;

명시적 커서로부터 가져오기

SELECT INTO는 Oracle DB가 묵시적으로 SELECT문을 위한 커서를 열어 행을 가져오고 작업이 종료되거나 예외가 발생하면 자동으로 커서를 닫는다. 반면 사용자가 명시적으로 커서를 선언하고 열고, 가져오고, 닫는 동작을 할 수 있다. SELECT INTO 문과 달리 커서를 선언부에서 따로 초기화를 해야한다.

OE.ORDERS 테이블에서 SALES_REP_ID로 그룹화하여 ORDER_TOTAL의 합이 많은 순서대로 2000달러씩 보너스를 주는 커서를 프로그래밍해보자. 보너스는 10000달러가 있다고 가정한다.

DECLARE v_total_bonus INTEGER := 10000; CURSOR sales_rep_cur IS SELECT * FROM ( SELECT sales_rep_id, SUM(order_total) sum_order_total FROM oe.orders WHERE sales_rep_id IS NOT NULL GROUP BY sales_rep_id ) ORDER BY sum_order_total DESC ; v_sales_rep_id sales_rep_cur%ROWTYPE; BEGIN OPEN sales_rep_cur; LOOP FETCH sales_rep_cur INTO v_sales_rep_id; EXIT WHEN sales_rep_cur%NOTFOUND; v_total_bonus := v_total_bonus – 2000; DBMS_OUTPUT.put_line(‘SALES[‘ || v_sales_rep_id.sales_rep_id || ‘] get bonus $2000’); EXIT WHEN v_total_bonus <= 0; END LOOP; CLOSE sales_rep_cur; END; -- 결과 /* SALES[161] get bonus $2000 SALES[156] get bonus $2000 SALES[154] get bonus $2000 SALES[158] get bonus $2000 SALES[159] get bonus $2000 */ 커서 FOR 반복문 사용 FOR 반복문을 사용하여 커서를 열고 닫는 것을 생략하고 좀더 간편하게 작성할 수 있다. 위에서 본 예제를 FOR 반복문을 사용하여 프로그래밍 해보자. DECLARE v_total_bonus INTEGER := 10000; CURSOR sales_rep_cur IS SELECT * FROM ( SELECT sales_rep_id, SUM(order_total) sum_order_total FROM oe.orders WHERE sales_rep_id IS NOT NULL GROUP BY sales_rep_id ) ORDER BY sum_order_total DESC ; BEGIN FOR sales_rep IN sales_rep_cur LOOP v_total_bonus := v_total_bonus - 2000; DBMS_OUTPUT.put_line('SALES[' || sales_rep.sales_rep_id || '] get bonus $2000' || ', sales $' || sales_rep.sum_order_total || ' in this month' ); EXIT WHEN v_total_bonus <= 0; END LOOP; END; -- 결과 /* SALES[161] get bonus $2000, sales $661734.5 in this month SALES[156] get bonus $2000, sales $202617.6 in this month SALES[154] get bonus $2000, sales $171973.1 in this month SALES[158] get bonus $2000, sales $156296.2 in this month SALES[159] get bonus $2000, sales $151167.2 in this month */ -- 다른 변수가 없다면 선언부를 생략할 수 있다 BEGIN FOR sales_rep IN ( SELECT * FROM ( SELECT sales_rep_id, SUM(order_total) sum_order_total FROM oe.orders WHERE sales_rep_id IS NOT NULL GROUP BY sales_rep_id ) ORDER BY sum_order_total DESC ) LOOP DBMS_OUTPUT.put_line('SALESMAN[' || sales_rep.sales_rep_id || ']' || ' sales $' || sales_rep.sum_order_total || ' in this month' ); END LOOP; END; -- 결과 /* SALESMAN[161] sales $661734.5 in this month SALESMAN[156] sales $202617.6 in this month SALESMAN[154] sales $171973.1 in this month SALESMAN[158] sales $156296.2 in this month SALESMAN[159] sales $151167.2 in this month SALESMAN[155] sales $134415.2 in this month SALESMAN[163] sales $128249.5 in this month SALESMAN[153] sales $114215.7 in this month SALESMAN[160] sales $88238.4 in this month */ 동적 쿼리 사용(EXECUTE IMMEDIATE INTO) EXECUTE IMMEDIATE INTO 문을 사용하여 SELECT문을 즉시 실행하여 변수에 담을 수 있다. Function과 Procedure를 활용하여 동적쿼리를 사용하는 PL/SQL을 프로그래밍 해보자. 실제 환경에서는 동적 쿼리는 SQL 인젝션 위험이 있어 보안에 주의 해야 한다. -- 단일 결과 동적 쿼리 CREATE OR REPLACE FUNCTION single_number_value ( table_in IN VARCHAR2, column_in IN VARCHAR2, where_in IN VARCHAR2) RETURN NUMBER IS l_return NUMBER; BEGIN EXECUTE IMMEDIATE 'SELECT ' || column_in || ' FROM ' || table_in || ' WHERE ' || where_in INTO l_return; RETURN l_return; END; -- Function created. -- SQL Worksheet에서 따로 따로 써서 RUN 해야 한다. BEGIN DBMS_OUTPUT.put_line ( single_number_value ( 'oe.product_information', 'category_id', 'product_id=1797')); END; -- 결과: 12 -- 여러 결과 동적 쿼리 (BULK COLLECT 사용) CREATE OR REPLACE PROCEDURE show_number_values ( table_in IN VARCHAR2, column_in IN VARCHAR2, where_in IN VARCHAR2) IS TYPE values_t IS TABLE OF NUMBER; l_values values_t; BEGIN EXECUTE IMMEDIATE 'SELECT ' || column_in || ' FROM ' || table_in || ' WHERE ' || where_in BULK COLLECT INTO l_values; FOR indx IN 1 .. l_values.COUNT LOOP DBMS_OUTPUT.put_line (l_values (indx)); END LOOP; END; -- Procedure created. BEGIN show_number_values ( 'oe.orders', 'order_total', 'order_total >= 25000 order by order_total desc’); END; — 결과 /* 295892 282694.3 268651.8 144054.8 120131.3 103834.4 103679.3 94513.5 92829.4 … */

커서 변수

커서 변수는 커서 또는 결과집합을 가리키는 변수이다. 명시적 커서와 달리 커서 변수를 프로시저나 함수의 인자로 전달할 수 있다. 커서 변수는 주로 결과 집합을 응답하는 PL/SQL을 작성할 때 많이 사용된다.

— 매출이 가장 높은 상품 구하는 함수 생성 CREATE OR REPLACE FUNCTION find_top_sales_product ( result_count_in NUMBER ) RETURN SYS_REFCURSOR IS cur SYS_REFCURSOR; BEGIN OPEN cur FOR SELECT product_id, sales FROM ( SELECT product_id, sum(quantity * unit_price) sales FROM oe.order_items GROUP BY product_id ORDER BY sales DESC ) WHERE ROWNUM <= result_count_in; RETURN cur; END; -- 함수를 호출하여 상위 10개의 출력하는 PL/SQL DECLARE v_products_cur SYS_REFCURSOR; v_product_id NUMBER; v_sales NUMBER; BEGIN v_products_cur := find_top_sales_product(10); LOOP FETCH v_products_cur INTO v_product_id, v_sales; EXIT WHEN v_products_cur%NOTFOUND; DBMS_OUTPUT.put_line('Product[' || v_product_id || '] sales $' || v_sales); END LOOP; END; -- 결과 /* Product[2350] sales $922708.6 Product[3127] sales $364351 Product[2359] sales $180872.8 Product[2252] sales $134079 Product[3003] sales $97464.4 Product[2311] sales $89411.7 Product[3106] sales $82490 Product[2236] sales $79741.2 Product[2289] sales $78099 Product[2245] sales $61908 */ 적절한 방법 선택 하나의 행을 조회할 때는 SELECT INTO 문 또는 동적 쿼리를 사용 모든 행을 조회할 때 본문이 하나 이상의 DML문을 실행하지 않으면 FOR 반복문 사용 BULK COLLECT로 가져와야 할 경우 명시적 커서를 사용하지만 각 FETCH에서 조회 결과 수를 제한할 것 쿼리 결과가 런타임에 달라질 경우 또는 결과를 PL/SQL이 아닌 환경으로 전달해야할 경우 커서 변수 사용 코드를 작성하는 동안 SELECT 문을 완전히 구성할 수 없는 경우에만 동적 쿼리(EXECUTE IMMEDIATE) 사용 참고

So you have finished reading the 오라클 커서 topic article, if you find this article useful, please share it. Thank you very much. See more: 오라클 커서 사용 이유, 오라클 동적쿼리 커서, 오라클 커서 조회, 오라클 커서 정리, 오라클 커서 오류, 오라클 커서 SELECT, 오라클 커서 예외처리, 오라클 커서 ROWCOUNT

Leave a Comment