오라클,PL/SQL,DBMS_SQL,동적SQL실습 테이블 생성, 멀티행 입력,BIND_ARRAY, EXECUTE, 오라클교육, 오라클학원, 오라클동영상,자바교육,자바학원,SQL교육, SQL학원
http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=730
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학원