2022년 1월 7일 금요일

(ORACLE동영상)오라클 DBMS_OUTPUT이란?, PUT_LINE, GET_LINE, SPOOL 출력을 파일로, ENABLE, DISABLE, 프로시저작성실습, 자바학원, 오라클학원, 자바교육, 오라클교육, SQL교육, SQL학원

 (ORACLE동영상)오라클 DBMS_OUTPUT이란?, PUT_LINE, GET_LINE, SPOOL 출력을 파일로, ENABLE, DISABLE, 프로시저작성실습, 자바학원, 오라클학원, 자바교육, 오라클교육, SQL교육, SQL학원


http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=727 


오라클 DBMS_OUTPUT이란?, PUT_LINE, GET_LINE, SPOOL 출력을 파일로, ENABLE, DISABLE, 프로시저작성실습

오라클 DBMS_OUTPUT이란?, PUT_LINE, GET_LINE, SPOOL 출력을 파일로, ENABLE, DISABLE, 프로시저작성실습오라클 PL/SQLDBMS_OUTPUT 패키지이론 / 실습DBMS_OUTPUT 패키지는 PL/SQL 블록(BEGIN ~ END)이나 프로시저, 함수 등 SUB

ojc.asia

https://www.youtube.com/watch?v=fYfTQruthLA&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=37

DBMS_OUTPUT 패키지는 PL/SQL 블록(BEGIN ~ END)이나 프로시저, 함수 등 SUB PROGRAM 및 패키지, 트리거등에서 메시지를 출력할 수  있는 기능을 제공하는데 메시지를 버퍼에 저장하고 버퍼에서 읽어오기 위한 기능을 제공하는 오라클 패키지 입니다.


https://www.youtube.com/watch?v=-2CzUYAmRvk&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=5 


이 패키지의 PUT 프로시저 및 PUT_LINE 프로시저를 사용하면 다른 트리거, 프로시저 또는 패키지에서 읽을 수 있는 정보를 버퍼에 저장할 수 있고, 별도의 PL/SQL 프로시저 또는 익명 블록에서 GET_LINE 프로시저 및 GET_LINES 프로시저를 호출하여 버퍼링된 정보를 표시할 수 있습니다.


https://www.youtube.com/watch?v=9cS-bMTbkLo&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=6 


ENABLE 프로시저를 호출하여 버퍼를 할당 하며(기본 20000 바이트), PUT, PUT LINE으로 버퍼에 메시지를 넣습니다. 버퍼 메시지의 각 라인은 라인끝(CARRIAGE RETURN/LINE FEED) 값을 가지고 있으며 CHR(13) || CHR(10)을 DBMS_OUT으로 출력하면 동일한 효과를 얻습니다.


PUT, PUT LINE으로 버퍼에 저장된 메시지는 GET_LINE, GET_LINES 으로 읽어 들일수 있으며 DBMS_OUTPUT.DISABLE 프로시저로 할당된 버퍼를 제거 합니다.


GET_LINES으로 읽을 때 라인을 읽어 들일 변수의 타입으로 DBMS_OUT 패키지에는 CHARARR 타입이 정의되어 있는데 형식은 다음과 같습니다.

TYPE CHARARR IS TABLE OF VARCHAR2(32767);


SQL*Plus의 경우  SQL 문 또는 익명 PL/SQL 호출을 실행한 후 GET_LINES를 호출합니다.



DBMS_OUTPUT.DISABLE;
메시지 출력을 비활성화
DBMS_OUTPUT.ENABLE(
   buffer_size IN INTEGER DEFAULT 20000
);
메시지 출력 활성화, NULL을 입력하면 버퍼 사이즈는 무한
DBMS_OUTPUT.GET_LINE (
   line OUT VARCHAR2, 
   status OUT INTEGER
);
버퍼에서 한 라인을 검색
메시지를 성공적으로 읽어 온 경우에는 0을 반환하고 그렇지 못한 경우에는 1을 반환.

DBMS_OUTPUT.GET_LINES (
   lines OUT CHARARR, 
   numlines IN OUT INTEGER
);
버퍼에서 라인의 배열을 검색
DBMS_OUTPUT.NEW_LINE;
현재라인을 종료 하고 새 라인을 삽입
(라인의 종료를 마킹)
DBMS_OUTPUT.PUT(
   item IN VARCHAR2
);
문자열을 출력 후 다음라인을 이동하지않고 대기
DBMS_OUTPUT.PUT_LINE(
   item IN VARCHAR2
);
최대 32767 바이트로
버퍼에서 새롭게 문자열을 가진  한 라인을 삽입, 문자열을 출력 후 다음라인 이동



DBMS_OUTPUT.ENABLE(buffer_size IN INTEGER DEFAULT 20000); ⇒ 메시지 출력 활성화, NULL을 입력하면 buffer size는 무한


set serveroutput on

spool c:\logs\dbms.txt


BEGIN 

   -- 버퍼를 활성화, 기본버퍼 사이즈는 20000 바이트

   dbms_output.enable;    

   

   dbms_output.put('굿 데이2!!');    

   dbms_output.put_line('안녕하세요~'); 

   dbms_output.new_line();

   dbms_output.put_line('즐거운 하루 되세요~'); 

   --dbms_output.put('굿 데이!!');  

   

   dbms_output.put('굿 데이2!!'); 

   dbms_output.put(CHR(13) || CHR(10));

   dbms_output.put_line('안녕하세요2~'); 

   --dbms_output.put('굿 데이2!!'); 

END;   


create or replace procedure DBMS_TEST

is

begin

    dbms_output.enable;

    DBMS_OUTPUT.PUT_LINE('test1');

    DBMS_OUTPUT.PUT_LINE('test2');

    DBMS_OUTPUT.PUT_LINE('test3');

end;


declare

   lines dbms_output.chararr; 

   num_lines number := 3; 

begin

   DBMS_TEST;

   

   -- 아래 GET_LINE이하를 주석으로 막고 실행하면 프로시저에서 출력한 형태로 출력

   dbms_output.get_lines(lines, num_lines); 

   

   FOR i IN 1..num_lines LOOP 

      dbms_output.put_line(i || '->' || lines(i)); 

   END LOOP; 

end;


declare

    message VARCHAR(1024);

    status INTEGER;

begin

   DBMS_TEST;

   

   DBMS_OUTPUT.GET_LINE(message, status);

   DBMS_OUTPUT.PUT_LINE(message);

   DBMS_OUTPUT.PUT_LINE(status);

end;



#오라클, #DBMS_OUTPUT이란, #DBMS_OUTPUT, #PUT_LINE, #GET_LINE, #오라클프로시저, #오라클교육, #SQL교육, #자바교육, #오라클학원, #자바학원, #SQL학원, #오라클동영상, 오라클, DBMS_OUTPUT이란, DBMS_OUTPUT, PUT_LINE, GET_LINE, 오라클프로시저, 오라클교육, SQL교육, 자바교육, 오라클학원, 자바학원, SQL학원, 오라클동영상

2022년 1월 5일 수요일

ORACLE동영상, PLSQL 함수로 팩토리얼 구하기, Factorial Oracle Function, 함수실행방법, 바인드변수, 호스트변수, 오라클교육, SQL교육, 오라클학원, SQL학원, 자바교육, 자바학원

 ORACLE동영상, PLSQL 함수로 팩토리얼 구하기, Factorial Oracle Function, 함수실행방법, 바인드변수, 호스트변수, 오라클교육, SQL교육, 오라클학원, SQL학원, 자바교육, 자바학원


https://youtu.be/P0vET1PjxFM




https://www.youtube.com/watch?v=9cS-bMTbkLo&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=6 

함수 실습, Factorial 구하기

PL/SQL내부 및 외부에서 실행


강의 : 이종철





실습 : PL/SQL Factorial 구하는 함수 작성

          PL/SQL 내부 및 외부에서 실행



create or replace function fact(p_num in number)
return number
is
    f number := 0;
begin
    if p_num = 0 then
       f := 1;
    else
        f := p_num * fact(p_num - 1);
    end if;
    
    return f;
end;
/

set serveroutput on
declare
    num number := 5;
    f number;
begin
    f := fact(num);
    dbms_output.put_line(' Factorial ' || num || ' = ' || f);
end;


Factorial 5 = 120
PL/SQL 프로시저가 성공적으로 완료되었습니다.


accept num prompt 'Enter a number : ';   --대체변수
var f number;   
exec :f := fact(&num);
print f;

         F
----------
       120

https://www.youtube.com/watch?v=RE79vqW_s6o&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=31

https://www.youtube.com/watch?v=x6gW4inKtZg&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=32 

https://www.youtube.com/watch?v=kF7_EEJKlQQ&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=29 

https://www.youtube.com/watch?v=-2CzUYAmRvk&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=5 


https://www.youtube.com/watch?v=7iTlIcwOX4A&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=7 

#오라클, #PLSQL, #팩토리얼, #Factorial, #오라클함수, #함수실행, #바인드변수, #호스트변수, #오라클교육, #SQL교육, #오라클학원, #SQL학원, #자바교육, #자바학원, 오라클, PLSQL, 팩토리얼, Factorial, 오라클함수, 함수실행, 바인드변수, 호스트변수, 오라클교육, SQL교육, 오라클학원, SQL학원, 자바교육, 자바학원

2022년 1월 3일 월요일

PLSQL 동적커서 vs 정적커서, Dynamic Cursor실습, DDL실습, 오라클교육, SQL교육, ORACLE교육, SQL학원, 오라클학원, 자바학원, JAVA학원, ORACLE동영상

 PLSQL 동적커서 vs 정적커서, Dynamic Cursor실습, DDL실습, 오라클교육, SQL교육, ORACLE교육, SQL학원, 오라클학원, 자바학원, JAVA학원, ORACLE동영상


http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=725 


PLSQL 동적커서 vs 정적커서, Dynamic Cursor실습, DDL실습, 오라클교육, SQL교육, ORACLE교육, SQL학원, 오라

PLSQL 동적커서 vs 정적커서, Dynamic Cursor실습, DDL실습, 오라클교육, SQL교육, ORACLE교육, SQL학원, 오라클학원, 자바학원, JAVA학원오라클 PL/SQLDDL 실행Dynamic CursorStatic Cursor실습동적커서를 만들기 위해

ojc.asia

http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=724 


PLSQL, 동적SQL, Dynamic SQL, 커서OPEN FOR에서 Dynamaic SQL사용하기, 참조커서, 오라클교육, SQL교육, 자바

PLSQL, 동적SQL, Dynamic SQL, 커서OPEN FOR에서 Dynamaic SQL사용하기, 참조커서, 오라클교육, SQL교육, 자바교육, SQL학원, 오라클학원, 자바학원오라클 PL/SQLNative Dynamic SQLOPEN FOR, FETCH, CLOSE강의 : 이종철동적SQ

ojc.asia

http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=723 


PLSQL BULK COLLECT INTO 실습, SELECT, FETCH에서 BULK COLLECT INTO 사용하기, 오라클교육, SQL교육, JAVA교육, 오

PLSQL BULK COLLECT INTO 실습, SELECT, FETCH에서 BULK COLLECT INTO 사용하기, 오라클교육, SQL교육, JAVA교육, 오라클학원, SQL학원, 자바학원오라클 PL/SQLSELECT, FETCH에서BULK COLLECT INTO 사용하기실습[BULK COLLECT INTO]SE

ojc.asia

http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=721 


오라클 프로시저실습, INOUT파라미터, 반복문, LOOP ENDLOOP,FOR, WHILE,오라클교육, 오라클학원, SQL교육,

오라클 프로시저실습, INOUT파라미터, 반복문, LOOP ENDLOOP,FOR, WHILE,오라클교육, 오라클학원, SQL교육, SQL학원오라클 PL/SQL프로시저 작성반복문(LOOP~END LOOP, WHILE, FOR)INOUT 파라미터실습[실습]주어진 수

ojc.asia


오라클 PL/SQL



DDL 실행

Dynamic Cursor

Static Cursor


실습





동적커서를 만들기 위해서는 참조커서를 이용하여 쿼리 문자열 OPEN FOR 구문으로 커서를 생성 합니다.


동적커서를 만들기 위한 OPEN-FOR-USING 문은 커서 변수를 SQL쿼리와 연결하고, 쿼리를 실행하고, 결과 집합의 첫 번째 행 앞에 커서를 놓은 다음, %ROWCOUNT에 의해 유지되는 처리된 행 수를 0으로 만드는 과정을 거칩니다.


WHERE 절을 미리 알고 있는 쿼리를 작성할 때 OPEN-FOR-USING 문을 사용하며, 알 수 없는 수의 WHERE 절이 있는 동적 쿼리 작성이 필요한 경우에는 OPEN-FOR 문을 사용합니다. 이때 커서 변수의 TYPE은 REF CURSOR가 되어야 합니다.


아래 예제에서 커서는 런타임에 SQL문을 담은 변수값에 의해 동적으로 생성되므로 컴파일 시점에 존재하지 않는 테이블에 대해 참조도 가능합니다.


[실습 : DDL실행 및 동적커서 생성]

[정적커서 사용예]

DECLARE
       CURSOR c_emp IS SELECT ename, sal FROM emp WHERE deptno = 10;
       v_ename emp.ename%TYPE;
       v_sal   emp.sal%TYPE;
    BEGIN
       OPEN c_emp;
       LOOP
          FETCH c_emp INTO v_ename, v_sal;
         EXIT WHEN c_emp%NOTFOUND OR c_emp%NOTFOUND IS NULL;
         DBMS_OUTPUT.PUT_LINE(c_emp%ROWCOUNT || '. ' || v_ename || ',' || v_sal);
      END LOOP;
      CLOSE c_emp;
   END;
   /


[동적커서 사용예]

set serveroutput on;
drop table emp_test;
select * from emp_test;

CREATE OR REPLACE PROCEDURE DynamicCursor (p_job IN VARCHAR2) IS
  TYPE cur_type IS REF CURSOR;
  c_cursor cur_type;
  sql_text1  VARCHAR2(1000);
  sql_text2  VARCHAR2(1000);
  sql_text3  VARCHAR2(1000);
  p_text     VARCHAR2(100);
BEGIN
  sql_text1 := 'create table emp_test (empno number primary key, ename varchar2(20), job varchar2(50) ) ';
  execute immediate sql_text1;
   
  sql_text2 := 'insert into emp_test values( :1, :2, :3)';
  for i in 1..5 loop
    execute immediate sql_text2 using i, i || '길동', 'SALESMAN';
  end loop;
  
  commit;

  IF p_job != 'SALESMAN' THEN
    sql_text3 := 'SELECT :1 || '' Not SALESMAN''   AS text FROM dual';
  ELSE
    sql_text3 := 'SELECT ename FROM emp_test WHERE job = :1';
  END IF;
  
  OPEN c_cursor FOR sql_text3 USING p_job;
  LOOP
    FETCH c_cursor INTO p_text;
    EXIT WHEN c_cursor%NOTFOUND;
    dbms_output.put_line(p_text);
  END LOOP;
  CLOSE c_cursor;
END;
/

exec DynamicCursor('AAA');
exec DynamicCursor('SALESMAN');



#PLSQL동영상, #PLSQL, #동적커서, #정적커서, #DynamicCursor, #오라클교육, #SQL교육, #ORACLE교육, #SQL학원, #오라클학원, #자바학원, #JAVA학원, PLSQL동영상, PLSQL, 동적커서, 정적커서, DynamicCursor, 오라클교육, SQL교육, ORACLE교육, SQL학원, 오라클학원, 자바학원, JAVA학원


2022년 1월 1일 토요일

PLSQL, 동적SQL, Dynamic SQL, 커서OPEN FO에서 Dynamaic SQL사용하기, 참조커서, 오라클교육, SQL교육, 자바교육, SQL학원, 오라클학원, 자바학원

 

PLSQL, 동적SQL, Dynamic SQL, 커서OPEN FO에서 Dynamaic SQL사용하기, 참조커서, 오라클교육, SQL교육, 자바교육, SQL학원, 오라클학원, 자바학원


https://www.youtube.com/watch?v=upkNZLX6CV4&list=PLxU-iZCqT52CE6piTNJMXGGUvDvKw46_T&index=12 



https://www.youtube.com/watch?v=8hc030THr8w&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=16 

https://youtu.be/OCv-7nsq1w0



Native Dynamic SQL

OPEN FOR, FETCH, CLOSE 



강의 : 이종철






동적SQL(Dynamic SQL)이 필요한 이유?


DDL(데이터베이스 정의 언어) 문을 실행해야 하는 프로그램을 작성할 때, 변수를 이용하여 SQL문장을 동적으로 만들어 낼때, 컴파일타임에 존재하지 않는 DB Object를 참조하는 경우(테이블의 이름을 동적으로 생성), PL/SQL블록에서 다른 프로시저등을 호출하는 경우에 사용합니다.


이번 강좌에서는 Dynamic SQL 문이 여러 행을 반환하는 SELECT 문을 나타내는 경우를 실습하는데  다음과 같이 Native  Dynamic SQL로 처리할 수 있습니다.


OPEN FOR문을 사용하여 커서 변수를 Dynamic SQL문과 연결하는데, OPEN FOR 문의 USING 절에서 동적 SQL 문의 각 자리 표시자(:)에 대한 바인드 변수를 지정합니다.


이번 강좌에서는 Native Dynamic SQL의 형태로 커서를 사용하면서 동적 SQL문을 작성해 보겠습니다.


DECLARE
  -- 참조커서 타입 정의
  TYPE EmpCurTyp  IS REF CURSOR;
  v_emp_cur       EmpCurTyp;
  v_emp_record    emp%ROWTYPE;
  v_sql_text      VARCHAR2(200);
  v_deptno        emp.deptno%TYPE;
BEGIN
  -- 자리표시자와 함께  Dynamic SQL 구문을 작성 합니다.
  v_sql_text := 'SELECT * FROM EMP WHERE DEPTNO = :1';

  -- 커서를 오픈하고 USING구에서 :1 바인드 변수 값을 지정 합니다.
  OPEN v_emp_cur FOR v_sql_text USING 20;

  -- 커서에서 한건씩 레코드를 FETCH 합니다.
  LOOP
    FETCH v_emp_cur INTO v_emp_record;
    EXIT WHEN v_emp_cur%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE('EMPNO : ' || v_emp_record.empno || ',' || 'ENAME : ' || v_emp_record.ename);
  END LOOP;

  -- Close cursor:
  CLOSE v_emp_cur;
END;
/



#PLSQL, #동적SQL, #DynamicSQL, #커서, #SQL, #참조커서, #오라클교육, #SQL교육, #자바교육, #SQL학원, #오라클학원, #자바학원, PLSQL, 동적SQL, DynamicSQL, 커서, SQL, 참조커서, 오라클교육, SQL교육, 자바교육, SQL학원, 오라클학원, 자바학원

PLSQL 동적SQL, Dynamic SQL, Execute Immediate, DBMS_SQL, 오라클교육, SQL교육, 자바교육, 오라클학원, SQL학원, 자바학원

 PLSQL 동적SQL, Dynamic SQL, Execute Immediate, DBMS_SQL, 오라클교육, SQL교육, 자바교육, 오라클학원, SQL학원, 자바학원




https://youtu.be/Qf5u2u9Gt2Q




https://www.youtube.com/watch?v=x6gW4inKtZg&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=32 



https://www.youtube.com/watch?v=RE79vqW_s6o&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=31 

오라클 PL/SQL



Dynamic SQL

  • execute immediate를 이용하여 프로시저 호출



강의 : 이종철





동적SQL(Dynamic SQL)이 필요한 이유?


DDL(데이터베이스 정의 언어) 문을 실행해야 하는 프로그램을 작성할 때, 변수를 이용하여 SQL문장을 동적으로 만들어 낼때, 컴파일타임에 존재하지 않는 DB Object를 참조하는 경우(테이블의 이름을 동적으로 생성), PL/SQL블록에서 다른 프로시저등을 호출하는 경우에 사용합니다.


 PL/SQL은 Binding이 Compile시에 일어나므로 테이블 이름등이 컴파일 시점에 확인되어야 하는 등의 제한이 있지만 Dynamic SQL을 사용한다면, SQL문을 변수에 정의하여 SQL문의 최종완성을 동적으로 런타임중에 할 수 있다는 장점이 있습니다.


오라클은 Dynamic SQL을 지원하기 위한 2가지 방법을 제공하는데, 첫째는 PL/SQL에서 PL/SQL의 기본 기능으로서 Execute Immediate를 통해 지원하며, 둘째는 DBMS_SQL에서 Dynamic SQL을 위한 API를 제공 합니다.


이번 강좌에서는 Execute Immediate를 이용하여 Dynamic SQL을 작성하는 방법에 대해 살펴보겠습니다.


[실습 : PL/SQL블록, BEGIN ~ END 사이에서 프로시저 호출 실습]


select * from emp;

create or replace procedure creatEmp (
  empno in out  emp.empno%type,
  ename in      emp.ename%type,
  sal   in      emp.sal%type

as
begin
  select max(empno) + 1 into empno
  from emp;

  insert into emp (empno, ename, sal)
  values (empno, ename, sal);
  
  commit;
end;
/
declare
  sql_text    varchar2(500);
  new_empno   emp.empno%type;
  new_ename   emp.ename%type := '홍길동';
  new_sal     emp.sal%type := 999;
  
begin
  -- Dynamic SQL을 이용하여 프로시저를 호출합니다.
  sql_text := 'BEGIN creatEmp(:a, :b, :c); END;';
  execute immediate sql_text using in out new_empno, new_ename, new_sal;
  dbms_output.put_line('inserted empno : ' || new_empno);
end;



#PLSQL, #동적SQL, #DynamicSQL, #ExecuteImmediate, #DBMS_SQL, #오라클교육, #SQL교육, #자바교육, #오라클학원, #SQL학원, #자바학원, PLSQL, 동적SQL, DynamicSQL, ExecuteImmediate, DBMS_SQL, 오라클교육, SQL교육, 자바교육, 오라클학원, SQL학원, 자바학원














 

PLSQL BULK COLLECT INTO 실습, SELECT, FETCH에서 BULK COLLECT INTO 사용하기, 오라클교육, SQL교육, JAVA교육, 오라클학원, SQL학원, 자바학원, 오라클동영상

 PLSQL BULK COLLECT INTO 실습, SELECT, FETCH에서   BULK COLLECT INTO 사용하기, 오라클교육, SQL교육, JAVA교육, 오라클학원, SQL학원, 자바학원, 오라클동영상





https://youtu.be/x6gW4inKtZg


https://www.youtube.com/watch?v=RE79vqW_s6o&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=31 

https://www.youtube.com/watch?v=mAQNkUZ_9CA&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=30 




SELECT, FETCH에서 

BULK COLLECT INTO 사용하기


[BULK COLLECT INTO]

SELECT에서 BULK COLLECT INTO를 이용하면 여러건의 레코드를 한번에 읽어들여 속도를 향상 시킬 수 있으며,  커서에서도 FETCH를 하는 경우에도 한건씩 꺼내는것 보다 한번에 꺼낸다면 속도 향상에 도움이 될 수 있습니다.  물론 이 경우 읽어들이는 데이터에 따른 메모리 사용량은 고려 되어야 합니다.


BULK COLLECT INTO 다음에는 여러 레코드를 한번에 담을 수 있는 데이터 타입이 와야 하는데 PL/SQL의 TABLE 타입(일차원 배열)을 사용합니다.


다음과 같은 경우에 사용 가능 합니다.


SELECT 컬럼리스트  BULK COLLECT INTO 컬렉션

FETCH 커서명 BULK COLLECT INTO 컬렉션

EXECUTE IMMEDIATE 쿼리문자열  BULK COLLECT INTO 컬렉션


[실습]

set timing on
select * from myemp1;

-- 일반적인 FOR LOOP 커서 사용
declare    
    cursor emp_cur is select * from myemp1 where rownum < 400000;
    tot number := 0;
    emp_r myemp1%rowtype;
begin 
    open emp_cur;
    loop  
        fetch emp_cur into emp_r;
        exit when emp_cur%notfound;
        tot := tot + emp_r.sal;  
    end loop;
    dbms_output.put_line('tot : ' || tot);   
    close emp_cur;
exception
    when others then
        dbms_output.put_line(sqlerrm(sqlcode));
end;

-- SELECT절에서 BULK COLLECT INTO 사용하기
declare 
    type emp_r_array is table of myemp1%rowtype; 
    emp_table emp_r_array;
    tot number := 0;
begin
    select * bulk collect into emp_table
    from myemp1 
    where rownum < 400000;
    
    DBMS_OUTPUT.PUT_LINE('SQL%ROWCOUNT : ' || SQL%ROWCOUNT);
    
    for i in emp_table.first..emp_table.last loop  
        tot := tot + emp_table(i).sal;    
    end loop;
    
    dbms_output.put_line('tot : ' || tot);    
exception
    when others then
        dbms_output.put_line(sqlerrm(sqlcode));
end;


-- FETCH에서 BULK COLLECT INFO 사용하기
create or replace procedure getEmp3
is
   type empcurtype is ref cursor;
   type empnolist is table of myemp1.empno%type;
   type enamelist is table of myemp1.ename%type;
   
   emp_cur empcurtype;
   empnos empnolist;
   enames enamelist;
begin
   open emp_cur for 'select empno, ename from myemp1 where rownum < 1000';
   fetch emp_cur bulk collect into empnos, enames;
   for i in enames.first..enames.last loop
      dbms_output.put_line(enames(i));
   end loop;   
   close emp_cur;
end;
/
exec getEmp3;


#PLSQL #BULKCOLLECTINTO , #오라클커거, #forall, #오라클교육, #SQL교육, #JAVA교육, #오라클학원, #SQL학원, #자바학원, #오라클동영상, PLSQL BULKCOLLECTINTO , 오라클커거, forall, 오라클교육, SQL교육, JAVA교육, 오라클학원, SQL학원, 자바학원, 오라클동영상, 

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...