2021년 12월 28일 화요일

오라클 패키지(Oracle Package) 실습 동영상, One Time Only Procedure, 오라클교육/오라클학원/ORACLE교육/ORACLE학원/자바교육/JAVA학원/자바동영상

 

오라클 패키지(Oracle Package) 실습 동영상, One Time Only Procedure, 오라클교육/오라클학원/ORACLE교육/ORACLE학원/자바교육/JAVA학원/자바동영상

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


오라클 패키지(Oracle Package) 실습 동영상, One Time Only Procedure, 오라클교육/오라클학원/ORACLE교육/ORAC

오라클 패키지(Oracle Package) 실습 동영상, One Time Only Procedure, 오라클교육/오라클학원/ORACLE교육/ORACLE학원/자바교육/JAVA학원오라클 PL/SQL오라클 패키지 실습ONE TIME ONLY PROCEDURE란?강의 : 이종철ONE TIME

ojc.asia

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


오라클 PLSQL, 전위적 선언(Forward Declaration), ORACLE 패키지, SQL교육, 오라클교육, 자바교육, 자바학원

오라클 PLSQL, 전위적 선언(Forward Declaration), ORACLE 패키지, SQL교육, 오라클교육, 자바교육, 자바학원오라클 PL/SQL전위적 선언(Forward Declaration)이종철동일한 PL/SQL블록에 여러 개의 Sub Program들이 올 수

ojc.asia


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

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

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


오라클 PL/SQL



오라클 패키지 실습

ONE TIME ONLY PROCEDURE란?


강의 : 이종철




ONE TIME ONLY PROCEDURE


  • 객체지향 프로그래밍의 초기화블록 처럼 패키지에서도 초기화 블록이 존재하는데 패키지내 함수나 프로시저가 최초 호출될 때 딱한번 호출되는 BEGIN~END 절을 만들 수 있는데 이를 One Time Only 프로시저라고 하고 주로 패키지내에서의 데이터 초기화 작업을 수행 합니다.
  • 패키지 바디의 맨 뒤쪽에 기술한다.


-- 이번에는 좀더 복잡한 패키지를 만들어 보자.


SQL> create table emp_log (

    log_date date,

    log_user varchar2(50),

    program varchar2(50)

    );


테이블이 생성되었습니다.


SQL> CREATE OR REPLACE PACKAGE emp_pkg AS

   /* 외부에서 접근가능한 TYPE, CURSOR, EXCEPTION */

   TYPE EmpRecType  IS RECORD (ename emp.ename%TYPE, sal emp.sal%TYPE);


 CURSOR desc_sal  RETURN EmpRecType;  -- 커서를 패치할 때 EmpRecType으로 받아야 함


   /* emp 테이블의 insert 건수를 기록, 전역변수 */

   insert_cnt NUMBER;


   /* 외부에서 호출 가능한 서브 프로그램들 */

   FUNCTION insert_emp (

      p_ename  emp.ename%TYPE,

      p_sal    emp.sal%TYPE,

      p_deptno dept.deptno%TYPE) RETURN emp.empno%TYPE;

   PROCEDURE fire_emp (p_empno emp.empno%TYPE);

   FUNCTION  nth_highest_sal (p_rank NUMBER) RETURN EmpRecType;

END emp_pkg;

/

패키지가 생성되었습니다.


SQL>  CREATE OR REPLACE PACKAGE BODY emp_pkg

   IS

      /* desc_sal 커서에 대한 구현부 */

      CURSOR desc_sal RETURN EmpRecType IS

         SELECT ename, sal FROM emp ORDER BY sal DESC;


      /* insert_emp 함수의 구현부 */

      FUNCTION insert_emp (

          p_ename  emp.ename%TYPE,

          p_sal    emp.sal%TYPE,

         p_deptno dept.deptno%TYPE) RETURN  emp.empno%TYPE

     IS

        new_empno NUMBER(5);

     BEGIN

        SELECT max(empno) + 1 into new_empno FROM EMP;

        INSERT INTO emp (empno, ename, sal, deptno)

             VALUES (

                      new_empno,

                      p_ename,

                      p_sal,

                      p_deptno

                    );

          COMMIT;

        insert_cnt := insert_cnt + 1;

        RETURN new_empno;

     END insert_emp;


     /*  fire_emp 프로시저 구현부 */

     PROCEDURE fire_emp (p_empno emp.empno%TYPE)

     IS

     BEGIN

        DELETE FROM emp WHERE empno = p_empno;

        COMMIT;

     END fire_emp;


     /* nth_highest_salary함수 구현부

        급여 순위 몇번째에 해당 하는 사원 리턴 */

     FUNCTION nth_highest_sal (p_rank NUMBER) RETURN EmpRecType

     IS

        --커서가 리턴하는 EmpRecType을 받기위한 변수

        emp_rec EmpRecType;  

     BEGIN

        OPEN desc_sal;  --패키지에서 정의한 전역커서 사용

        FOR i IN 1..p_rank LOOP

           -- 커서의 리턴형이 EmpRecType이므로,

           FETCH desc_sal INTO emp_rec; END LOOP;

        CLOSE desc_sal;

        RETURN emp_rec;

     END nth_highest_sal;


  -- 패키지가 최초 호출될 때 한번만 호출

  -- one time only procedure

  BEGIN

     INSERT INTO emp_log VALUES (SYSDATE, USER, 'EMP_PKG');

     COMMIT;

     insert_cnt := 0;

END emp_pkg;

  /

패키지 본문이 생성되었습니다.


SQL> variable empno number

SQL> exec :empno := emp_pkg.insert_emp('이종철',9990, 30)

PL/SQL 처리가 정상적으로 완료되었습니다.


SQL> print empno


     EMPNO

----------

     10000


SQL> exec emp_pkg.fire_emp(10000)

PL/SQL 처리가 정상적으로 완료되었습니다.


SQL> select empno, ename from emp where empno = 10000;

선택된 레코드가 없습니다.


SQL> set serveroutput on

SQL> DECLARE

    emp_rec emp_pkg.EmpRecType;

    BEGIN

       emp_rec := emp_pkg.nth_highest_sal(1);

       dbms_output.put_line('급여 최고높은 사원 :' || emp_rec.ename);

    END;

    /

급여 최고높은 사원 :오라클자바커뮤니티


SQL> BEGIN

    DBMS_OUTPUT.PUT_LINE('insert 건수 :' || emp_pkg.insert_cnt);

    END;

    /

insert 건수 :1


SQL>  select * from emp_log;


LOG_DATE LOG_USER                                           PROGRAM

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


16/01/01 SCOTT                      



#오라클, #패키지실습, #오라클패키지, #오라클동영상, #OneTimeOnlyProcedure, #오라클교육, #오라클학원, #ORACLE교육, #ORACLE학원, #자바교육, #JAVA학원,#패키지실습, 오라클,오라클패키지, 오라클동영상, OneTimeOnlyProcedure, 오라클교육, 오라클학원, ORACLE교육, ORACLE학원, 자바교육, JAVA학원

2021년 12월 26일 일요일

오라클 PLSQL, 전위적 선언(Forward Declaration), ORACLE 패키지, SQL교육, 오라클교육, 자바교육, 자바학원, ORACLE학원, JAVA학원

 

오라클 PLSQL, 전위적 선언(Forward Declaration), ORACLE 패키지, SQL교육, 오라클교육, 자바교육, 자바학원, ORACLE학원, JAVA학원

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


오라클 PLSQL, 전위적 선언(Forward Declaration), ORACLE 패키지, SQL교육, 오라클교육, 자바교육, 자바학원

오라클 PLSQL, 전위적 선언(Forward Declaration), ORACLE 패키지, SQL교육, 오라클교육, 자바교육, 자바학원오라클 PL/SQL전위적 선언(Forward Declaration)이종철동일한 PL/SQL블록에 여러 개의 Sub Program들이 올 수

ojc.asia

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

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

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

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


오라클 PL/SQL



전위적 선언(Forward Declaration)



이종철





  • 동일한 PL/SQL블록에 여러 개의 Sub Program들이 올 수 있는데 어떤 프로시저/함수에서 다른 프로시저/함수를 호출할 때 호출당하는 프로시저/함수는 먼저 선언 되어야 한다. 먼저 선언하지 않으려면 호출하는 프로시저/함수의 앞쪽에 만들면 된다.


DECLARE

  -- proc2 선언 및 구현

  PROCEDURE proc2(num NUMBER) IS

  BEGIN

    proc1();

    dbms_output.put_line('num : ' || num);

  END;


 -- proc1 구현

 PROCEDURE proc1 IS

 BEGIN

   dbms_output.put_line('proc1');

 END;

BEGIN

 proc2(10);

END;

/



        proc1();

        *

5행에 오류:

ORA-06550: 줄 5, 열9:PLS-00313: 범위 내에 'PROC1'(이)가 선언되지 않았습니다

ORA-06550: 줄 5, 열9:PL/SQL: Statement ignored



– proc1에 대해 상단에서 선언을 하면 된다.

DECLARE

  -- proc1 선언

  PROCEDURE proc1;


  -- proc2 선언 및 구현

  PROCEDURE proc2(num NUMBER) IS

  BEGIN

    proc1();

    dbms_output.put_line('num : ' || num);

  END;


 -- proc1 구현

 PROCEDURE proc1 IS

 BEGIN

   dbms_output.put_line('proc1');

 END;


BEGIN

 proc2(10);

END;

/



proc1

num : 10


PL/SQL 처리가 정상적으로 완료되었습니다.


– proc1을 먼저 정의하면 된다.

DECLARE

   -- proc1 구현

  PROCEDURE proc1 IS

  BEGIN

    dbms_output.put_line('proc1');

  END;

 

  -- proc2 선언 및 구현

  PROCEDURE proc2(num NUMBER) IS

  BEGIN

    proc1();

    dbms_output.put_line('num : ' || num);

  END; 

BEGIN

 proc2(10);

END;


proc1

num : 10


PL/SQL 처리가 정상적으로 완료되었습니다.


#전위적선언, #PLSQL, #PLSQL함수, #PLSQL프로시저, #PLSQL교육, #PLSQL동영상, #PLSQL이란, #오라클교육, #SQL교육, #자바교육, #자바학원, #오라클학원, #SQL학원, 전위적선언, PLSQL, PLSQL함수, PLSQL프로시저, PLSQL교육, PLSQL동영상, PLSQL이란, 오라클교육, SQL교육, 자바교육, 자바학원, 오라클학원, SQL학원

오라클 패키지(Oracle PLSQL Package)란? 패키지 HelloWorld 실습, Create Package, Create Package Body, 자바학원, 오라클학원, SQL학원, 자바교육, 오라클교육, SQL교육

 

오라클 패키지(Oracle PLSQL Package)란? 패키지 HelloWorld 실습, Create Package, Create Package Body, 자바학원, 오라클학원, SQL학원, 자바교육, 오라클교육, SQL교육


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


오라클 패키지(Oracle PLSQL Package)란? 패키지 HelloWorld 실습, Create Package, Create Package Body

오라클 패키지(Oracle PLSQL Package)란? 패키지 HelloWorld 실습, Create Package, Create Package Body오라클 PL/SQL오라클 패키지(Oracle Package)패키지 HelloWorld강의 : 이종철패키지란 연관성 있는, 논리적으로 연관된

ojc.asia


https://youtu.be/EZl9trYM1HM

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

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

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

오라클 PL/SQL

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

오라클 패키지(Oracle Package)

패키지 HelloWorld



강의 : 이종철




패키지란 연관성 있는, 논리적으로 연관된 PL/SQL 타입(Types), 변수(Variable), 서브 프로그램(저장 프로시저, 저장 함수)의 그룹이며 오라클 스키마 오브젝트 입니다. 


패키지 명세(Specification)와 패키지 바디(Body)로 나누어지며 바디는 생략 가능 합니다.

패키지 명세는 CREATE PACKAGE 명령으로, 패키지 바디는 CREATE PACKAGE BODY 명령으로 작성 합니다.


패키지 명세에서 정의한 서브 프로그램 및 변수, 타입만 외부에서 접근, 호출 가능 합니다.

패키지 명세 : 타입, 전역변수, 커서, 예외, PL/SQL 프로그램에 대한 선언
패키지 바디 : 패키지 명세에서 정의한 모든 커서, 서브프로그램을 구현


패키지를 사용하는 장점은 다음과 같습니다.

연관된 타입, 서브 프로그램들을 PL/SQL 모듈안에 캡슐화. 시스템을 구축 운영하다보면 많은 함수, 프로시저등을 만들어 쓰는데 시간이 지나게되면 수가 많아져서 관리가 힘들어 집니다. 이런 함수, 프로시저들을 연관성 있는 것끼리 묵어 놓은 것이 패키지 입니다.

패키지 명세를 통한 커서, 예외, 함수나 프로시저의 구조를 정의하고 이를 먼저 컴파일하는 것이 가능 합니다.

패키지명세는 외부에 공개되는데 이를 구현한 패키지 바디는 외부에서 볼 수 없으며 타입, 서브프로그램들을 PUBLIC, PRIVATE으로 선언하여 접근을 제어할 수 있습니다. 패키지 바디에서 PRIVATE으로 선언한 함수, 프로시저는 외부에서는 참조 불가능 하며 내부에서 기능을 구현하기 위해 참조 됩니다.

패키지 명세에서 정의한 커서 or 예외, PUBLIC 변수들은 세션동안 유효하므로 이것들을 활용한 새로운 기능의 추가가 용이 합니다.

패키지안의 프로시저, 함수등이 최초 호출될 때 전체 패키지가 메모리에 로드 되므로 이후 호출 부터는 DISK I/O는 없습니다. 성능상 장점.


<기본형식>

[패키지 명세]
CREATE [OR REPLACE] PACKAGE package_name IS
   [variable declaration]
   [cursor declaration]
   [exception declaration]
   [procedure declaration]
   [function declaration] 
END;
 
[패키지 바디]
CREATE [OR REPLACE] PACKAGE BODY package_name  IS 
   [variable declaration]
   [cursor implementation]
   [exception implementation]
   [procedure bodies]
   [function bodies] 
END;


패키지 HelloWorld 실습 

프로시저 하나만 가지는 HELLO라는 이름의  패키지를 생성해 봅시다.


먼저 패키지 명세를 작성하세요.


-- 패키지명세는 패키지를 구성할 요소를 정의 합니다.
CREATE OR REPLACE PACKAGE HELLO
IS
   -- HELLO 패키지는 P_TEST라는 프로시저 하나로 이루어져 있습니다.
   PROCEDURE P_TEST(P_NAME VARCHAR2);
END;


<실행결과>

Procedure P_PRINT_ENAME이(가) 컴파일되었습니다.


패키지 바디를 작성하세요.


-- 패키지 바디를 생성 합니다.
CREATE OR REPLACE PACKAGE BODY HELLO
IS
   -- 패키지 명세에서 정의한 P_TEST 프로시저를 작성합니다.
   PROCEDURE P_TEST(P_NAME VARCHAR2)
   IS
   BEGIN
      DBMS_OUTPUT.PUT_LINE('Hello~ ' || P_NAME);
   END;
END HELLO;


<실행결과>

Package Body HELLO이(가) 컴파일되었습니다.



패키지의 프로시저를 호출해 봅시다..


SET SERVEROUTPUT ON;

-- 패키지내의 프로시저를 호출할 때는 패키지.프로시저 형태로 호출 합니다.
EXEC HELLO.P_TEST('오라클자바커뮤니티');


<실행결과>

Hello~ 오라클자바커뮤니티


#오라클패키지, #OraclePackage, #패키지HelloWorld, #createpackage, #오라클교육, #PLSQL교육, #자바교육, #SQL교육,#오라클학원, #PLSQL학원, #자바학원, #SQL학원, 오라클패키지, OraclePackage, 패키지HelloWorld, createpackage, 오라클교육, PLSQL교육, 자바교육, SQL교육,오라클학원, PLSQL학원, 자바학원, 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...