레이블이 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학원, 

2020년 7월 19일 일요일

(SQL기초강좌)실습데이터 설치, 실습데이터 구조

(SQL기초강좌)실습데이터 설치, 실습데이터 구조

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

1-4. 실습데이터 설치 및 SQL*PLUS 실행환경 설정

Oracle11g 설치 후 우리가 사용할 SCOTT 계정은 계정에 락이 걸려있고 비밀번호가 만료 되어 있으므로 아래 SQL을 실행하자.

C:>SQLPLUS / AS SYSDBA

SQL>ALTER USER SCOTT ACCOUNT UNLOCK;

SQL>ALTER USER SCOTT IDENTIFIED BY TIGER;

아래 URL에서 실습데이터 설치

http://ojc.asia/bbs/board.php?bo_table=LecOrccleTun&wr_id=77

SQL*PLUS에서 실습을 원할히 하기 위해 아래 명령을 실행하고 SQL*PLUS 접속시 마다 ONJ.SQL 파일을 실행하자.

SQL> EDIT ONJ

SET LINESIZE 130

SET TIMING ON

SET AUTOTRACE ON

SET PAGESIZE 100

SQL> @ONJ

SQL*Plus에서 한글이 깨진다면 아래처럼 NLS_LANG 환경변수를 설정하자.

(컴퓨터 à 속성 à 고급 à 환경변수)

AMERICAN_AMERICA.KO16KSC5601

쿼리를 익히기 위해서는 데이터 건수가 별로 없는 EMP, DEPT 테이블을 이용하여 쿼리를 실습할 것이며 성능이나 수행시간, 통계정보등 분석을 위한 쿼리는 MYEMP1, MYDEPT1 위주로 실습이 진행될 것이다.

1-4. 실습데이터 구조(테이블 정의서)

테이블 정의서란? 데이터베이스 설계시 테이블의 구조와 칼럼의 특성을 알기 쉽게 요약한 내용이며 테이블의 칼럼 이름, 데이터 타입, 키 종류, NULL이나 중복 값의 허용 여부, 외래 키 그리고 칼럼에 대한 기타 설명으로 구성되어 있다.

- MYEMP1(사원 테이블) 10,000,002건

칼럼이름

데이터 타입

Key Type

NN/

Unique

FK table

FK

column

설명

EMPNO

NUMBER

PK

NN,U

사번

ENAME

VARCHAR2(100)

NN

이름

DEPTNO

VARCHAR2(1)

FK

MYDEPT1

DEPTNO

부서코드

ADDR

VARCHAR2(100)

주소

SAL

NUMBER(7)

급여

JOB

VARCHAR2(20)

직무

COMM

NUMBER(7)

수당

SUNGBYUL

VARCHAR2(1)

성별

(M : 남, F : 여)

HIREDATE

DATE

입사일자

OUTDATE

VARCHAR2(8)

퇴사일자

MGR

NUMBER

FK

MYEMP1

EMPNO

관리자사번

SQL> SELECT COUNT(*) FROM MYEMP1;

COUNT(*)

---------

10000002

SQL> SET LINESIZE 130

SQL> COLUMN ADDR FORMAT A10

SQL> COLUMN ENAME FORMAT A10

SQL> COLUMN JOB FORMAT A10

SQL> COLUMN DEPTNO FORMAT A4

SQL> SELECT EMPNO, ENAME,DEPTNO, ADDR, SAL, JOB, COMM, SUNGBYUL,HIREDATE, OUTDATE

FROM MYEMP1

WHERE ROWNUM < 5;

EMPNO ENAME DEPT ADDR SAL JOB COMM S HIREDATE OUTDATE

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

541 홍길동541 1 서울541 541 CLERK M 13/11/06 15/05/01

542 다길동542 2 부산542 542 SALESMAN F 13/11/05

543 나길동543 3 대구543 543 MANAGER M 13/11/04

544 마길동544 0 광주544 544 ANALYST F 13/11/03

- MYEMP1_OLD(퇴사자 테이블) 1,666,667건

(사원테이블 데이터 중 퇴사자만 별도로 저장, 이름이 ‘홍길동’으로 시작하는 사원이 퇴사자임)

칼럼이름

데이터 타입

Key Type

NN/

Unique

FK table

FK

column

설명

EMPNO

NUMBER

PK, FK

NN,U

사번

ENAME

VARCHAR2(100)

NN

이름

SQL> SELECT COUNT(*) FROM MYEMP1_OLD;

COUNT(*)

----------

1666667

SQL> select empno, ename

from myemp1_old

where rownum < 5;

EMPNO ENAME

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

8521 홍길동8521

8527 홍길동8527

8533 홍길동8533

8539 홍길동8539

- MYDEPT1(부서테이블) 7건

칼럼이름

데이터 타입

Key Type

NN/

Unique

FK table

FK

column

설명

DEPTNO

VARCHAR2(1)

PK

NN,U

부서코드

DNAME

VARCHAR2(100)

부서명

UP_DEPTNO

VARCHAR2(1)

FK

MYDEPT1

DEPTNO

상위

부서코드

SQL> COLUMN DNAME FORMAT A20

SQL> SELECT * FROM MYUDEPT1;

D DNAME UP_DEPT

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

0 개발1팀 4

1 개발2팀 4

2 기획1팀 5

3 기획2팀 5

4 개발본부 6

5 교육본부 6

6 오라클자바커뮤니티

7 개의 행이 선택되었습니다.

- MYLECTURE1(강좌 테이블) 7건

칼럼이름

데이터 타입

Key Type

NN/

Unique

FK table

FK

column

설명

LECTURE_ID

NUMBER(2)

PK

강좌코드

LECTURE_NM

VARCHAR2(100)

강좌명

TEACHER

VARCHAR2(20)

강사

ROOM

VARCHAR2(1)

강의장

SQL> COLUMN LECTURE_NM FORMAT A30

SQL> SELECT * FROM MYLECTURE1;

LECTURE_ID LECTURE_NM TEACHER ROOM

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

1 스프링개발자과정 이종철 A

2 SQL기초실무과정 김종철 B

3 ORACLE HINT과정 안종철 C

4 닷넷개발자과정 박종철 D

5 웹퍼블리실개발자과정 최종철 E

6 자바기초에서스프링까지과정 김종철 F

7 안드로이드과정 이종철 G

7 개의 행이 선택되었습니다.

- MYSUGANG1(수강 테이블) 6,500,000건

칼럼이름

데이터 타입

Key Type

NN/

Unique

FK table

FK

column

설명

EMPNO

NUMBER

PK, FK

MYEMP1

EMPNO

사번

LECTURE_ID

NUMBER(2)

PK, FK

LECTURE

LECTURE_ID

강좌코드

SEQ

NUMBER(2)

PK

순번

START_DATE

DATE

시작일

END_DATE

DATE

종료일

SQL> SELECT COUNT(*) FROM MYSUGANG1;

COUNT(*)

----------

6500000

SQL> SELECT * FROM MYSUGANG1 WHERE ROWNUM < 5;

EMPNO LECTURE_ID SEQ START_DATE END_DATE

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

940 1 1 15/05/01 15/05/31

941 1 1 15/05/01 15/05/31

942 1 1 15/05/01 15/05/31

943 1 1 15/05/01 15/05/31

- MYSALGRADE1(급여등급 테이블) 6건

칼럼이름

데이터 타입

Key Type

NN/

Unique

FK table

FK

column

설명

GRADE

NUMBER(1)

급여등급

LOSAL

NUMBER(8)

하한값

HISAL

NUMBER(8)

상한값

SQL> SELECT * FROM MYSALGRADE1;

GRADE LOSAL HISAL

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

1 0 1000000

2 1000001 2000000

3 2000001 3000000

4 3000001 4000000

5 4000001 5000000

6 5000001 6000000

6 개의 행이 선택되었습니다.

다음 3개의 테이블은 오라클을 설치하면 기본적으로 생성되는 scott 계정에 있는 EMP, DEPT, SALGRADE 테이블로 기본 쿼리를 익히는데 사용되는 건수가 적은 테이블 이다.

- EMP(사원 테이블) 14건

칼럼이름

데이터 타입

Key Type

NN/

Unique

FK table

FK

column

설명

EMPNO

NUMBER(4)

PK

NN,U

사번

ENAME

VARCHAR2(10)

이름

JOB

VARCHAR2(9)

직무

MGR

NUMBER(4)

FK

EMP

EMPNO

관리자사번

HIREDATE

DATE

입사일자

SAL

NUMBER(7,2)

급여

COMM

NUMBER(7,2)

수당

DEPTNO

NUMBER(2)

FK

DEPT

DEPTNO

부서번호

SQL> SELECT * FROM EMP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

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

7369 SMITH CLERK 7902 80/12/17 800 20

7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30

7521 WARD SALESMAN 7698 81/02/22 1250 500 30

7566 JONES MANAGER 7839 81/04/02 2975 20

7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30

7698 BLAKE MANAGER 7839 81/05/01 2850 30

7782 CLARK MANAGER 7839 81/06/09 2450 10

7788 SCOTT ANALYST 7566 87/07/13 3000 20

7839 KING PRESIDENT 81/11/17 5000 10

7844 TURNER SALESMAN 7698 81/09/08 1500 0 30

7876 ADAMS CLERK 7788 87/07/13 1100 20

7900 JAMES CLERK 7698 81/12/03 950 30

7902 FORD ANALYST 7566 81/12/03 3000 20

7934 MILLER CLERK 7782 82/01/23 1300 10

14 개의 행이 선택되었습니다.

- DEPT(부서 테이블) 4건

칼럼이름

데이터 타입

Key Type

NN/

Unique

FK table

FK

column

설명

DEPTNO

NUMBER(2)

PK

NN,U

부서코드

DNAME

VARCHAR2(14)

부서이름

LOC

VARCHAR2(13)

위치

SQL> SELECT * FROM DEPT;

DEPTNO DNAME LOC

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

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

4 개의 행이 선택되었습니다.

- SALGRADE(급여등급 테이블) 5건

칼럼이름

데이터 타입

Key Type

NN/

Unique

FK table

FK

column

설명

GRADE

NUMBER

등급

LOSAL

NUMBER

급여하한값

HISAL

NUMBER

급여상한값

SQL> SELECT * FROM SALGRADE;

GRADE LOSAL HISAL

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

1 700 1200

2 1201 1400

3 1401 2000

4 2001 3000

5 3001 9999

5 개의 행이 선택되었습니다.

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