레이블이 PLSQL레코드타입인 게시물을 표시합니다. 모든 게시물 표시
레이블이 PLSQL레코드타입인 게시물을 표시합니다. 모든 게시물 표시

2020년 7월 25일 토요일

PL/SQL Record Type


 

PL/SQL Record Type

 

Record Type

 

n  서로 다른 종류의 데이터 아이템을 모아서 만든 데이터 구조로 데이터 테이블의

레코드()과 유사하게 다른 필드로 구성되어 있으며 프로그래밍 언어의 구조체와 유사하다.

n  하나의 레코드 타입안에는 Scalar Data Type, 다른 Record Type, Table Type들이 들어올 수

있으며 먼저 TYPE을 정의 후 변수의 데이터 타입으로 할당하여 사용한다.

 

TYPE emp_record_type is record (

  empno emp.empno%TYPE,

  ename emp.ename%TYPE,

  sal   emp.sal%TYPE

);

emp_record emp_record_type;

 

n  PL/SQL은 다음 세가지 형태의 레코드를 다룰 수 있다.

User-Definded records : 사용자가 서로 다른 필드로 레코드 구조를 정의

Table-Based records : %rowtype 이용

Cursor-Based redords : %rowtype 이용

 

1. User-Definded Records

 

SQL> edit ojc9

 

SET SERVEROUTPUT ON

CREATE OR REPLACE PROCEDURE ojc9(p_empno IN NUMBER)

IS

TYPE emp_record_type is record (

  empno emp.empno%TYPE,

  ename emp.ename%TYPE,

  sal   emp.sal%TYPE

);

emp_record emp_record_type;

BEGIN

   SELECT empno, ename, sal

     INTO emp_record.empno, emp_record.ename, emp_record.sal

     FROM emp

    WHERE empno = p_empno;

 

   DBMS_OUTPUT.PUT_LINE(emp_record.empno || ' : ' || emp_record.ename || ' : ' || emp_record.sal);

 

EXCEPTION

    WHEN NO_DATA_FOUND THEN

      DBMS_OUTPUT.PUT_LINE('no data...');

    WHEN TOO_MANY_ROWS THEN

      DBMS_OUTPUT.PUT_LINE('to many rows...');

END ojc9;

/

 

-- 위에서 작성한 ojc9.sql 파일을 실행하여 ojc9 라는 프로시저를 생성한다.

-- 오류가 발생하면 show errors로 확인 후 디버깅 해야 한다.

SQL> @ojc9

프로시저가 생성되었습니다.

 

SQL> exec ojc9(7788)

7788 : SCOTT : 3000

 

-- EMP 테이블에 없는사원번호를 입력, SELECT되는 데이터가 한건도 없으므로 오류발생.

-- EXCEPTION절로 빠져 WHEN NO_DATA_FOUND 처리부가 실행된다.

-- NO_DATA_FOUND는 오라클서버에 미리 정의된 예외명이며오라클 서버 오류인 ORA-01403에러에 대해 부여된 예외 명칭이다.

SQL> exec ojc9(1234)

No data…

 

2. Table Based Records(%rowtype 이용)

 

DECLARE

   emp_rec emp%rowtype;

BEGIN

   SELECT * into emp_rec

   FROM emp

   WHERE empno = 7369;

 

   dbms_output.put_line('사번 : ' || emp_rec.empno);

   dbms_output.put_line('이름 : ' || emp_rec.ename);

   dbms_output.put_line('급여 : ' || emp_rec.sal);

END;

/

 

사번 : 7369

이름 : SMITH

급여 : 4500

 

3. Cursor-Based Records(%rowtype 이용)

 

DECLARE

   CURSOR emp_cur is

      SELECT empno, ename, sal

      FROM emp;

     

   emp_rec emp_cur%rowtype;

BEGIN

   OPEN emp_cur;

   LOOP

      FETCH emp_cur into emp_rec;

      EXIT WHEN emp_cur%notfound;

      DBMS_OUTPUT.put_line(emp_rec.empno || ':' || emp_rec.ename

                                   || ':' || emp_rec.sal);

   END LOOP;

   CLOSE emp_cur;

END;

/

 

7369:SMITH:4500

7499:ALLEN:1600

……

7900:JAMES:950

7902:FORD:3000

7934:MILLER:1300

 


 

4. Table Type, Record Type을 같이 이용하는 예문

 

DECLARE

   TYPE empRecordType IS RECORD (

      empno  NUMBER(4),

      ename  VARCHAR2(20)

    );

   TYPE empTableType IS TABLE OF empRecordType  -- PL/SQL Table Type

      INDEX BY BINARY_INTEGER;

  

   emp_rec empRecordType;

   emp_table empTableType;

BEGIN

    emp_rec.empno := 1111;

    emp_rec.ename := '1길동';

    emp_table(1) := emp_rec; 

   

    for i in emp_table.first .. emp_table.last Loop

      dbms_output.put_line(emp_table(i).empno || ':' || emp_table(i).ename);

    End Loop;

   

END;

/

 

1111:1길동

 

 

2020년 7월 19일 일요일

오라클 PLSQL 데이터타입, 레코드타입, Record Type

오라클 PLSQL 데이터타입, 레코드타입, Record Type

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

3.1.3 Record Type

Record Type

n 서로 다른 종류의 데이터 아이템을 모아서 만든 데이터 구조로 데이터 테이블의

레코드(행)과 유사하게 다른 필드로 구성되어 있으며 프로그래밍 언어의 구조체와 유사하다.

n 하나의 레코드 타입안에는 Scalar Data Type, 다른 Record Type, Table Type들이 들어올 수

있으며 먼저 TYPE을 정의 후 변수의 데이터 타입으로 할당하여 사용한다.

TYPE emp_record_type is record (

empno emp.empno%TYPE,

ename emp.ename%TYPE,

sal emp.sal%TYPE

);

emp_record emp_record_type;

n PL/SQL은 다음 세가지 형태의 레코드를 다룰 수 있다.

User-Definded records : 사용자가 서로 다른 필드로 레코드 구조를 정의

Table-Based records : %rowtype 이용

Cursor-Based redords : %rowtype 이용

1. User-Definded Records

SQL> edit ojc9

SET SERVEROUTPUT ON

CREATE OR REPLACE PROCEDURE ojc9(p_empno IN NUMBER)

IS

TYPE emp_record_type is record (

empno emp.empno%TYPE,

ename emp.ename%TYPE,

sal emp.sal%TYPE

);

emp_record emp_record_type;

BEGIN

SELECT empno, ename, sal

INTO emp_record.empno, emp_record.ename, emp_record.sal

FROM emp

WHERE empno = p_empno;

DBMS_OUTPUT.PUT_LINE(emp_record.empno || ' : ' || emp_record.ename || ' : ' || emp_record.sal);

EXCEPTION

WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE('no data...');

WHEN TOO_MANY_ROWS THEN

DBMS_OUTPUT.PUT_LINE('to many rows...');

END ojc9;

/

-- 위에서 작성한 ojc9.sql 파일을 실행하여 ojc9 라는 프로시저를 생성한다.

-- 오류가 발생하면 show errors로 확인 후 디버깅 해야 한다.

SQL> @ojc9

프로시저가 생성되었습니다.

SQL> exec ojc9(7788)

7788 : SCOTT : 3000

-- EMP 테이블에 없는사원번호를 입력, SELECT되는 데이터가 한건도 없으므로 오류발생.

-- EXCEPTION절로 빠져 WHEN NO_DATA_FOUND 처리부가 실행된다.

-- NO_DATA_FOUND는 오라클서버에 미리 정의된 예외명이며, 오라클 서버 오류인 ORA-01403에러에 대해 부여된 예외 명칭이다.

SQL> exec ojc9(1234)

No data…

2. Table Based Records(%rowtype 이용)

DECLARE

emp_rec emp%rowtype;

BEGIN

SELECT * into emp_rec

FROM emp

WHERE empno = 7369;

dbms_output.put_line('사번 : ' || emp_rec.empno);

dbms_output.put_line('이름 : ' || emp_rec.ename);

dbms_output.put_line('급여 : ' || emp_rec.sal);

END;

/

사번 : 7369

이름 : SMITH

급여 : 4500

3. Cursor-Based Records(%rowtype 이용)

DECLARE

CURSOR emp_cur is

SELECT empno, ename, sal

FROM emp;

emp_rec emp_cur%rowtype;

BEGIN

OPEN emp_cur;

LOOP

FETCH emp_cur into emp_rec;

EXIT WHEN emp_cur%notfound;

DBMS_OUTPUT.put_line(emp_rec.empno || ':' || emp_rec.ename

|| ':' || emp_rec.sal);

END LOOP;

CLOSE emp_cur;

END;

/

7369:SMITH:4500

7499:ALLEN:1600

……

7900:JAMES:950

7902:FORD:3000

7934:MILLER:1300

4. Table Type, Record Type을 같이 이용하는 예문

DECLARE

TYPE empRecordType IS RECORD (

empno NUMBER(4),

ename VARCHAR2(20)

);

TYPE empTableType IS TABLE OF empRecordType -- PL/SQL Table Type

INDEX BY BINARY_INTEGER;

emp_rec empRecordType;

emp_table empTableType;

BEGIN

emp_rec.empno := 1111;

emp_rec.ename := '1길동';

emp_table(1) := emp_rec;

for i in emp_table.first .. emp_table.last Loop

dbms_output.put_line(emp_table(i).empno || ':' || emp_table(i).ename);

End Loop;

END;

/

1111:1길동

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