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

2022년 1월 8일 토요일

오라클,PL/SQL,DBMS_SQL,동적SQL실습 테이블 생성, 멀티행 입력,BIND_ARRAY, EXECUTE, 오라클교육, 오라클학원, 오라클동영상,자바교육,자바학원,SQL교육, SQL학원

 오라클,PL/SQL,DBMS_SQL,동적SQL실습  테이블 생성, 멀티행 입력,BIND_ARRAY, EXECUTE, 오라클교육, 오라클학원, 오라클동영상,자바교육,자바학원,SQL교육, SQL학원


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


오라클,PL/SQL,DBMS_SQL,동적SQL실습 테이블 생성, 멀티행 입력,BIND_ARRAY, EXECUTE, 오라클교육, 오라클학

오라클,PL/SQL,DBMS_SQL,동적SQL실습 테이블 생성, 멀티행 입력,BIND_ARRAY, EXECUTE, 오라클교육, 오라클학원, 오라클동영상,자바교육,자바학원,SQL교육, SQL학원오라클 PL/SQLDBMS_SQL동적SQL실습테이블 생성,

ojc.asia

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


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


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


DBMS_SQL

동적SQL실습

테이블 생성, 멀티행 입력


실습





DBMS_SQL을 이용하여 DDL문(CREATE, DROP)을 실행하고 생성된 테이블에 5개의 행을 오라클의 TABLE TYPE(배열)에 데이터를 넣은 후 멀티 행을 바인딩 하여 INSERT를 한번에 실행(EXECUTE)하는 예제를 실습하면서 DBMS_SQL 패키지 사용법에 대해 이해합니다.

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

[실습1 : DBMS_SQL 패키지를 이용하여 테이블 생성 및 멀티행 바인딩 후 한번에 입력 실습]


CREATE OR REPLACE PROCEDURE CREATE_INSERT_TEST

AS

    V_CURSOR        NUMBER := DBMS_SQL.OPEN_CURSOR();

    V_CNT           NUMBER;    

    V_ID_ARR        DBMS_SQL.NUMBER_TABLE;

    V_NAME_ARR      DBMS_SQL.VARCHAR2_TABLE;    

    V_SQL           VARCHAR2(200);

    V_AFFECTED_ROWS NUMBER;

BEGIN    

    -- TEST 테이블이 생성되어 있는지 딕셔너리 뷰에서 확인

    SELECT COUNT(*) INTO V_CNT FROM USER_TABLES WHERE TABLE_NAME = 'TEST';

    -- 이미 생성되어 있다면 삭제 후 생성

    IF V_CNT > 0 THEN

       DBMS_SQL.PARSE(V_CURSOR, 'drop table test', DBMS_SQL.NATIVE);

       DBMS_SQL.PARSE(V_CURSOR, 'create table test ( id number, name varchar2(20)) ', DBMS_SQL.NATIVE);

       

       DBMS_OUTPUT.PUT_LINE('##### 삭제 후 생성');

    -- 생성되어 있지 않은 경우 그냥 생성

    ELSE

       DBMS_SQL.PARSE(V_CURSOR, 'create table test ( id number, name varchar2(20)) ', DBMS_SQL.NATIVE);

       DBMS_OUTPUT.PUT_LINE('##### 생성');

    END IF;   

    

    -- 5건 데이터 입력 위해 배열에 데이터 생성

    FOR i IN 1..5 LOOP

        V_ID_ARR(i) := i;

        V_NAME_ARR(i) := i || '길동';

    END LOOP;

    

    -- SQL문장을 변수에 담기

    V_SQL := 'insert into test (id, name) values (:id, :name)';

    -- SQL구문 파싱

    DBMS_SQL.PARSE(V_CURSOR, V_SQL, DBMS_SQL.NATIVE);

    -- 바인드 변수 연결, 한건씩 연결시 BIND_VARIABLE 사용

    DBMS_SQL.BIND_ARRAY(V_CURSOR, 'id', V_ID_ARR);

    DBMS_SQL.BIND_ARRAY(V_CURSOR, 'name', V_NAME_ARR);

    -- SQL실행, 한번에 5건이 입력됨

    V_AFFECTED_ROWS := DBMS_SQL.EXECUTE(V_CURSOR);

    -- 입력건수 츨력

    DBMS_OUTPUT.PUT_LINE('INSERT 건수 : ' || V_AFFECTED_ROWS);

    

    DBMS_SQL.CLOSE_CURSOR(V_CURSOR);

EXCEPTION

   WHEN OTHERS THEN

      DBMS_OUTPUT.PUT_LINE(SQLERRM);

    IF DBMS_SQL.IS_OPEN(V_CURSOR) THEN

       DBMS_SQL.CLOSE_CURSOR(V_CURSOR);

    END IF;

END;


exec CREATE_INSERT_TEST;

select * from test;






#오라클,#PLSQL,#DBMS_SQL,#동적SQL,#BIND_ARRAY, #오라클교육, #오라클학원, #오라클동영상,#자바교육,#자바학원,#SQL교육, #SQL학원,오라클,PLSQL,DBMS_SQL,동적SQL,BIND_ARRAY, 오라클교육, 오라클학원, 오라클동영상,자바교육,자바학원,SQL교육, SQL학원

오라클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동영상,  

2022년 1월 7일 금요일

DBMS_SQL패키지,OPEN_CURSOR, PARSE, EXECUTE, 동적SQL, 커서, DDL실습, Dynamic SQL실습,오라클교육, SQL교육, 오라클학원, SQL학원

 

DBMS_SQL패키지,OPEN_CURSOR, PARSE, EXECUTE, 동적SQL, 커서, DDL실습, Dynamic SQL실습,오라클교육, SQL교육, 오라클학원, SQL학원


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

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


DBMS_SQL패키지,OPEN_CURSOR, PARSE, EXECUTE, 동적SQL, 커서, DDL실습, Dynamic SQL실습,오라클교육, SQL교육, 오

DBMS_SQL패키지,OPEN_CURSOR, PARSE, EXECUTE, 동적SQL, 커서, DDL실습, Dynamic SQL실습,오라클교육, SQL교육, 오라클학원, SQL학원오라클 PL/SQLDBMS_SQL 패키지란?DDL, 동적SQL실습DBMS_SQLDBMS_SQL 패키지는 동적 SQL을 사

ojc.asia

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


오라클 PL/SQL


DBMS_SQL 패키지란?

DDL, 동적SQL


실습




 

DBMS_SQL


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


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


  • EXECUTE 프로시저는 처리된 건수를 리턴하는데, INSERT, UPDATE 및 DELETE 문에 대해서만 유효하다. DDL을 포함한 다른 유형의 문의 경우 반환 값은 정의되지 않으므로 무시해야 한다.


 

[실습1 : DBMS_SQL 패키지를 이용하여 테이블 생성여부 확인 후 테이블 삭제 및 생성]


CREATE OR REPLACE PROCEDURE DBMS_SQL_TEST 

AS

    cursor_id INTEGER;

    rows_processed INTEGER;

    v_cnt NUMBER;

BEGIN

    cursor_id := DBMS_SQL.OPEN_CURSOR;

    

    SELECT COUNT(*) INTO v_cnt FROM user_tables WHERE table_name = 'TEST';

    IF v_cnt > 0 THEN

       DBMS_SQL.PARSE(cursor_id, 'drop table test', DBMS_SQL.NATIVE);

       rows_processed := DBMS_SQL.EXECUTE(cursor_id);

               -- v6 또는 0 : 버전6, v7 또는 2 : 버전7, NATIVE 또는 1 : 연결된 데이터베이스의 정상적인 동작을 지정

       DBMS_SQL.PARSE(cursor_id, 'create table test ( id number, name varchar2(20)) ', DBMS_SQL.NATIVE);

       rows_processed := DBMS_SQL.EXECUTE(cursor_id);

       

       DBMS_OUTPUT.PUT_LINE('삭제 후 생성');

    ELSE

       DBMS_SQL.PARSE(cursor_id, 'create table test ( id number, name varchar2(20)) ', DBMS_SQL.NATIVE);

       rows_processed := DBMS_SQL.EXECUTE(cursor_id);

       DBMS_OUTPUT.PUT_LINE('생성');

    END IF;   

    

EXCEPTION

WHEN OTHERS THEN

    DBMS_SQL.CLOSE_CURSOR(cursor_id);

    DBMS_OUTPUT.PUT_LINE(SQLERRM);

END;


set serveroutput on

exec dbms_sql_test;

select * from test;

drop table test; 



[실습2 : DBMS_SQL 패키지를 이용하여 동적SQL 커서 생성 후 FETCH]

-- 아래 예제는 EMP 테이블에서 입력한 부서코드의 사원을 출력하는 예제이다.

-- DBMS_SQL 패키지를 이용하여 커서를 생성하고 FETCH후 출력

 CREATE OR REPLACE PROCEDURE GETEMPS(P_DEPTNO IN NUMBER)

AS

   V_SQL           VARCHAR2(1000);

   V_CURSOR        INTEGER;

   V_AFFECTED_ROWS INTEGER;

   V_EMPNO         EMP.EMPNO%TYPE;

   V_ENAME         EMP.ENAME%TYPE;

BEGIN

     -- SQL문을 처리하려면 열린 커서가 있어야 하는데 OPEN_CURSOR함수를 사용, 커서ID를 리턴

     V_CURSOR := DBMS_SQL.OPEN_CURSOR;


     V_SQL := 'SELECT ename, sal 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);


     -- CURSOR로부터 추출된 칼럼의 값을 받는 변수 지정

     -- 커서명, 상대위치, 받을변수명 ,길이 지정

     DBMS_SQL.DEFINE_COLUMN (V_CURSOR, 1, V_EMPNO);

     DBMS_SQL.DEFINE_COLUMN (V_CURSOR, 2, V_ENAME, 20);


     -- SQL문 실행

     V_AFFECTED_ROWS := DBMS_SQL.EXECUTE(V_CURSOR);

     DBMS_OUTPUT.PUT_LINE('V_AFFECTED_ROWS : ' || V_AFFECTED_ROWS);


     -- CURSOR에서 데이터 추출

    WHILE(DBMS_SQL.FETCH_ROWS(V_CURSOR) > 0)

    LOOP

        -- FETCH 결과를 변수에 저장

        DBMS_SQL.COLUMN_VALUE(V_CURSOR,1,V_EMPNO);

        DBMS_SQL.COLUMN_VALUE(V_CURSOR,2,V_ENAME);


        DBMS_OUTPUT.PUT_LINE('EMPNO :' || V_EMPNO || 'ENAME : '|| V_ENAME);

    END LOOP;


    DBMS_SQL.CLOSE_CURSOR(V_CURSOR);

EXCEPTION

   WHEN OTHERS THEN

       IF DBMS_SQL.IS_OPEN(V_CURSOR) THEN

         DBMS_SQL.CLOSE_CURSOR(V_CURSOR);

       END IF;

END;

/


SET SERVEROUTPUT ON;

EXEC GETEMPS(20);




#DBMS_SQL, #오라클패키지,#OPEN_CURSOR, #동적SQL, #오라클커서, #오라클DDL, #동적SQL, #SQL실습,#오라클교육, #SQL교육, #오라클학원, #SQL학원, DBMS_SQL, 오라클패키지,OPEN_CURSOR, 동적SQL, 오라클커서, 오라클DDL, 동적SQL, SQL실습,오라클교육, SQL교육, 오라클학원, 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...