레이블이 SQL동영상인 게시물을 표시합니다. 모든 게시물 표시
레이블이 SQL동영상인 게시물을 표시합니다. 모든 게시물 표시

2022년 1월 8일 토요일

오라클PLSQL DBMS_SQL 참조커서(REFCURSOR) 실습, 동적SQL,TO_REFCURSOR,오라클교육,SQL교육,JAVA교육,오라클학원,SQL학원,SQL동영상

 오라클PLSQL DBMS_SQL 참조커서(REFCURSOR) 실습, 동적SQL,TO_REFCURSOR,오라클교육,SQL교육,JAVA교육,오라클학원,SQL학원,SQL동영상


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


PLSQL DBMS_SQL 참조커서(REFCURSOR) 실습, 동적SQL,TO_REFCURSOR,오라클교육,SQL교육,JAVA교육,오라클학원,SQL

PLSQL DBMS_SQL 참조커서(REFCURSOR) 실습, 동적SQL,TO_REFCURSOR,오라클교육,SQL교육,JAVA교육,오라클학원,SQL학원,SQL동영상오라클 PL/SQLDBMS_SQL일반커서를 참조커서로 변경리턴하기실습DBMS_SQL 패키지를 이용한

ojc.asia

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

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


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

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



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


DBMS_SQL 패키지를 이용한 참조커서(REF CURSOR)


  • 기본적으로 DBMS_SQL 패키지는 동적 SQL을 사용하여 DML(데이터 조작 언어) 또는 DDL(데이터 정의 언어) 문을 구문 분석, 실행, 데이터 조작할 수 있는 인터페이스를 제공한다.


  • DBMS_SQL 패키지의 PARSE 프로시저를 사용하여 SQL 구문을 파싱하며, DDL의 경우 별도의 EXECUTE 프로시저를 호출하지 않아도 된다.


  • ORACLE 11g이후 DBMS_SQL의 TO_REFCURSOR를 이용하여 일반 커서를 참조커서(REF CURSOR)로  변경할 수 있다.


  • 일반 커서는 정적이며 커서가 한번 SQL 영역을 가리키면 가리키는 곳을 변경 못한다. 하지만  참조커서(REF CURSOR)는 가능하다.


  • 일반 커서가 가리키는 데이터는 함수나 프로시저를 호출한 곳으로 리턴 할 수 없지만 참조커서(REF CURSOR)가 가리키는 데이터는 리턴하는 것이 가능하다.




[실습 : DBMS_SQL로 일반커서를 참조커서로 변환하고 리턴]

-- 이번에는 REF CURSOR를 리턴해 보자.

-- 아래처럼 함수의 리턴타입을 SYS_REFCURSOR로 하고 v_rc 변수의 타입도 SYS_REFCURSOR로 주면 된다. 

CREATE OR REPLACE FUNCTION emplist (p_deptno emp.deptno%TYPE)

        RETURN SYS_REFCURSOR

    IS

           v_sql     CLOB;

           v_cursor  PLS_INTEGER;

           v_rc      SYS_REFCURSOR;  --REF CURSOR형

           v_execute PLS_INTEGER;

       BEGIN

          v_cursor := DBMS_SQL.OPEN_CURSOR;

          v_sql :='SELECT * FROM emp WHERE deptno = :d';

 

         -- Dynamic SQL문 파싱

         DBMS_SQL.PARSE(v_cursor, v_sql, DBMS_SQL.NATIVE);

 

         -- 바인드변수 바인딩

         DBMS_SQL.BIND_VARIABLE(v_cursor, 'd', p_deptno);

 

         -- SQL문 실행

         v_execute := DBMS_SQL.EXECUTE(v_cursor);

 

         -- REF CURSOR로 변환

         v_rc := DBMS_SQL.TO_REFCURSOR(v_cursor);

 

         return v_rc;

      END;

     /


함수가 생성되었습니다.


set autoprint on

variable refcur refcursor

exec :refcur := emplist(20);


     EMPNO ENAME      JOB          MGR   HIREDATE     SAL      COMM     DEPTNO

     -----------------------------------------------------------------------------------------------------

      7782   CLARK      MANAGER    7839     81/06/09     3404.4               10

      7839   KING       PRESIDENT             81/11/17     6946.8               10

      7934   MILLER     CLERK        7782     82/01/23     2257.5               10



 

#PLSQL, #DBMS_SQL, #참조커서, #REFCURSOR, #동적SQL, #TO_REFCURSOR,#오라클교육,#SQL교육,#JAVA교육,#오라클학원,#SQL학원,#SQL동영상, PLSQL, DBMS_SQL, 참조커서, REFCURSOR, 동적SQL, TO_REFCURSOR,오라클교육,SQL교육,JAVA교육,오라클학원,SQL학원,SQL동영상,  

2021년 12월 31일 금요일

오라클동영상,FORALL 기반 벌크 입력(BULK INSERT) 실습, DMLL성능향상, 오라클교육, 오라클학원, SQL교육, SQL학원, 자바학원, 자바교육, SQL동영상

 오라클동영상,FORALL 기반 벌크 입력(BULK INSERT) 실습, DMLL성능향상, 오라클교육, 오라클학원, SQL교육, SQL학원, 자바학원, 자바교육, SQL동영상


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


FORALL 기반 벌크 입력(BULK INSERT) 실습, DMLL성능향상, 오라클교육, 오라클학원, SQL교육, SQL학원, 자

FORALL 기반 벌크 입력(BULK INSERT) 실습, DMLL성능향상, 오라클교육, 오라클학원, SQL교육, SQL학원, 자바학원, 자바교육, SQL동영상오라클 PL/SQL성능향상을 위한FORALL기반 BULK INSERT실습[실습]사번(empno),

ojc.asia

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 


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

오라클 PL/SQL




성능향상을 위한

FORALL기반 BULK INSERT


실습




[실습]

사번(empno), 이름(ename), 직무(job) 3개의 컬럼을 갖는 BULKTEST라는 테이블을 생성하여 100만건 정도 데이터를 입력하는데. 개별 건씩 입력 하는것과 FORALL을 이용하여 벌크로 INSERT하는 방식의 성능차이에 대해 확인해 보겠습니다.

FORALL을 이용하여 DML문을 작성하면 한 번에 한 행씩 실행될 모든 DML 문을 생성하고 SQL 실행엔진에 한번에 모두 보냅니다.

FORALL 구문을 이용하면 INSERT, UPDATE, DELETE와 같은 DML 사용시 컬렉션을 사용하며 매우 빠르게 작업을 할 수 있습니다.

FORALL구문은 데이터를 오라클의 TABLE TYPE(배열)에 담아서 한번에 SQL 실행엔진에 넘겨서 실행을 하므로 성능 향상에 도움이 됩니다.


1. 실습 테이블 생성

create table bulktest (
empno number primary key,
ename varchar2(20),
job   varchar2(50));


set timing on
alter system flush SHARED_POOL;

2. 일반적인 반복문을 통한 개별 INSERT
-- 24초 경과
declare
          cnt number := 0;
begin
     while (cnt < 1000000) loop
            cnt := cnt + 1;
            insert /*+ loop insert */ into bulktest values ( cnt, cnt || '길동', '개발직');               
      end loop;
      commit;
end;



3. Shared Pool에서 파싱된 SQL문 및 실행횟수 확인

-- 오라클이 INSERT 구문을 내부적으로 바인드 변수 처리를 하여 SQL문장은 하나, 실행횟수는 1,000,000임을 알수 있습니다.
select substr(sql_text,1,60) "sql", count(*),
       sum(executions) "총실행횟수"
from v$sqlarea
where sql_text like '%loop%'
group by substr(sql_text,1,60)
having count(*) > 0
order by 2;

select count(1) from bulktest;
truncate table bulktest;

4. FORALL을 이용한 BULK INSERT

alter system flush SHARED_POOL;

-- 2초
declare
  type bulktype is table of bulktest%rowtype index by binary_integer;
  mydata bulktype;
begin
  for i in 1 .. 1000000 loop
    mydata(i).empno := i;
    mydata(i).ename := i || '길동';
    mydata(i).job := '개발직';
  end loop;

  forall i in 1 .. 1000000 insert /*+ bulk insert */  into bulktest values mydata(i);
  commit;
end;


5. Shared Pool에서 파싱된 SQL문 및 실행횟수 확인

-- 오라클이 INSERT 구문을 내부적으로 바인드 변수 처리를 하여 SQL문장은 하나, 실행횟수도 하나임을 확인할 수 있습니다.
select substr(sql_text,1,60) "sql", count(*),
       sum(executions) "총실행횟수"
from v$sqlarea
where sql_text like '%bulk%'
group by substr(sql_text,1,60)
having count(*) > 0
order by 2;


select count(1) from bulktest;
truncate table bulktest;



#FORALL, #벌크입력, #BULKINSERT, #SQL튜닝, #오라클교육, #오라클학원,#SQL교육, #SQL학원, #자바학원, #자바교육, #SQL동영상, FORALL, 벌크입력, BULKINSERT, SQL튜닝, 오라클교육, 오라클학원,SQL교육, SQL학원, 자바학원, 자바교육, SQL동영상


오라클 프로시저실습, INOUT파라미터, 반복문, LOOP ENDLOOP,FOR, WHILE, SQL교육, ORACLE교육, JAVA교육, 오라클학원, 자바학원, SQL학원, SQL동영상

 오라클 프로시저실습, INOUT파라미터, 반복문, LOOP ENDLOOP,FOR, WHILE, SQL교육, ORACLE교육, JAVA교육, 오라클학원, 자바학원, SQL학원, SQL동영상





오라클 PL/SQL



프로시저 작성

반복문(LOOP~END LOOP, WHILE, FOR)

INOUT 파라미터


실습





[실습]

주어진 수 까지의 짝수의 합을 구하여 리턴하는 프로시저를 작성합니다.
DO ~ LOOP, WHILE LOOP, FOR LOOP 이용 3가지 방법
INOUT 파라미터 이용

set serveroutput on


create or replace procedure getSum(num in out number)
is
tot number := 0;
i number := 0 ;
begin
loop
exit when i >= num;
i := i + 1;
if mod(i, 2) = 0 then
tot := tot + i;
end if;
end loop;


num := tot;
end;
/


create or replace procedure getSum(num in out number)
is
tot number := 0;
i number := 0 ;
begin
while(i < num) loop
i := i + 1;
if mod(i, 2) = 0 then
tot := tot + i;
end if;
end loop;


num := tot;
end;
/


create or replace procedure getSum(num in out number)
is
tot number := 0;
begin
for i in 1..num LOOP
if mod(i, 2) = 0 then
tot := tot + i;
end if;
end loop;


num := tot;
end;
/


declare
num number := 10;
begin
getSum(num);
dbms_output.put_line('total = ' || num);
end;


total = 30





#오라클, #오라클프로시저실습,#INOUT파라미터, #PLSQL반복문, #오라클교육, #오라클학원, #SQL교육, #SQL학원, #SQL동영상, #오라클동영상, #자바학원, #자바교육, 오라클, 오라클프로시저실습,INOUT파라미터, PLSQL반복문, 오라클교육, 오라클학원, SQL교육, SQL학원, SQL동영상, 오라클동영상, 자바학원, 자바교육



2021년 12월 29일 수요일

오라클 트리거(Oracle Trigger) Instead Of Trigger, 복합 뷰에 INSERT할때 대신 실행되는 Trigger, JAVA학원, 자바학원, SQL학원, 오라클학원, SQL교육, 오라클교육, 오라클동영상

 

오라클 트리거(Oracle Trigger) Instead Of Trigger, 복합 뷰에 INSERT할때 대신 실행되는 Trigger, JAVA학원, 자바학원, SQL학원, 오라클학원, SQL교육, 오라클교육, 오라클동영상


http://ojc.asia/bbs/board.php?bo_table=LecOracle&wr_id=307 


오라클 트리거(Oracle Trigger) Instead Of Trigger, 복합 뷰에 INSERT할때 대신 실행되는 Trigger

오라클 트리거(Oracle Trigger) Instead Of Trigger, 복합 뷰에 INSERT할때 대신 실행되는 Trigger오라클 PL/SQLInstead Of Trigger실습Instead Of Trigger여러 테이블로 이루어진 뷰에 DML이 가해질 때 대신 trigger를 동작시

ojc.asia

https://www.youtube.com/watch?v=Ja6HupDK0Ow&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=12&t=4s 

https://youtu.be/SZ9UqYQR1jw

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

오라클 PL/SQL




Instead Of Trigger


실습






Instead Of Trigger


  • 여러 테이블로 이루어진 뷰에 DML이 가해질 때  대신 trigger를 동작시킬 수 있는데 이때 사용하는 것이 instead of trigger 이다.


drop table employee;

테이블이 삭제되었습니다.


drop table department;

테이블이 삭제되었습니다.


CREATE TABLE department ( 

   deptno NUMBER PRIMARY KEY, 

   deptname VARCHAR2(20), 

   manager_num NUMBER 

   ); 


CREATE TABLE employee ( 

   empno NUMBER PRIMARY KEY, 

   empname VARCHAR2(20), 

   deptno NUMBER REFERENCES department(deptno), 

   startdate DATE 

   ); 


CREATE OR REPLACE  VIEW manager_info AS SELECT d.deptno, d.deptname, e.empno, e.empname 

                             FROM employee e, department d 

                             WHERE e.empno = d.manager_num; 


CREATE OR REPLACE TRIGGER manager_info_insert 

   INSTEAD OF INSERT ON manager_info 

   FOR EACH ROW 

DECLARE 

   employeeCount NUMBER; 

BEGIN 

   SELECT COUNT(*) INTO employeeCount 

   FROM employee e 

   WHERE e.deptno = :new.deptno; 


   IF employeeCount >= 1 THEN 

     UPDATE department d 

     SET manager_num = :new.empno 

     WHERE d.deptno = :new.deptno; 


     insert into employee (empno, empname, deptno, startdate) 

     values (:new.empno, :new.empname, :new.deptno, sysdate); 


   ELSE 

     insert into department(deptno, deptname, manager_num) 

     values (:new.deptno, :new.deptname, 0); 

  

     insert into employee (empno, empname, deptno, startdate) 

     values (:new.empno, :new.empname, :new.deptno, sysdate); 

   END IF; 

END; 


INSERT INTO manager_info VALUES (11,'SALES',1004,'ANGEL');

1 개의 행이 만들어졌습니다.


INSERT INTO manager_info VALUES (11,'SALES',1005,'SUJI');

1 개의 행이 만들어졌습니다.


SQL> commit;

커밋이 완료되었습니다.


SQL> SELECT * FROM department;


    DEPTNO DEPTNAME       MANAGER_NUM

    ---------- -------------------- -----------

        11   SALES            1005


SQL> SELECT * FROM employee;


     EMPNO EMPNAME        DEPTNO STARTDAT

    ---------- -------------------- ---------- --------

      1004 ANGEL                  11  16/05/01

      1005 SUJI                     11  16/05/01


SQL> INSERT INTO manager_info VALUES (21,'RND',1006,'SMITH');

1 개의 행이 만들어졌습니다.


SQL> SELECT * FROM department;


    DEPTNO DEPTNAME       MANAGER_NUM

    ---------- -------------------- -----------

        11 SALES                1005

        21 RND                    0


SQL> SELECT * FROM employee;


     EMPNO EMPNAME        DEPTNO STARTDAT

    ---------- -------------------- ---------- --------

      1004 ANGEL                   11 16/05/01

      1005 SUJI                     11 16/05/01

      1006 SMITH                    21 16/05/01


SQL> SELECT * FROM manager_info;


    DEPTNO DEPTNAME        EMPNO EMPNAME

    ---------- -------------------- ---------- --------

        11   SALES              1005  SUJI




#오라클트리거, #Trigger, #ORACLE, #오라클동영상, #트리거동영상, #SQL동영상, #SQL교육, #SQL학원, #오라클학원,#ORACLE학원, #자바학원, #JAVA학원, 오라클트리거, Trigger, ORACLE, 오라클동영상, 트리거동영상, SQL동영상, SQL교육, SQL학원, 오라클학원,ORACLE학원, 자바학원, JAVA학원, 
 

(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...