Oracle PL/SQL 레코드 유형(예 포함)

레코드 유형이란 무엇입니까?

레코드 유형은 프로그래머가 원하는 열 구조로 새로운 데이터 유형을 만들 수 있는 복잡한 데이터 유형입니다.

  • 하나 이상의 열을 그룹화하여 새로운 데이터 유형을 형성합니다.
  • 이러한 열에는 고유한 이름과 데이터 유형이 있습니다.
  • 레코드 유형은 데이터를 허용할 수 있습니다.
    • 여러 열로 구성된 단일 레코드로 또는
    • 레코드의 특정 열에 대한 값을 허용할 수 있습니다.
  • 레코드 유형은 단순히 새로운 데이터 유형을 의미합니다. 레코드 유형이 생성되면 데이터베이스에 새로운 데이터 유형으로 저장되며 프로그램에서 변수를 선언하는 데에도 사용됩니다.
  • 키워드를 사용하게 됩니다 '유형' 새로운 데이터 유형을 생성하고 있음을 컴파일러에 지시합니다.
  • '에서 생성할 수 있습니다.데이터베이스 수준” 데이터베이스 개체로 저장하거나, 데이터베이스 전체에서 사용하거나, "하위 프로그램 수준”, 이는 서브프로그램 내부에서만 볼 수 있습니다.
  • 복잡한 데이터를 단일 열에 보관할 수 있도록 데이터베이스 수준 레코드 유형을 테이블 열에 대해 선언할 수도 있습니다.
  • 이러한 데이터 형식의 데이터는 변수 이름 뒤에 마침표 연산자(.)와 열 이름(즉, ')을 참조하여 액세스할 수 있습니다. . '

데이터베이스 수준 선언 구문:

Oracle PL/SQL 레코드 유형

CREATE TYPE <type_name_db> IS RECORD
(
<column 1> <datatype>,
);

첫 번째 구문에서 'CREATE TYPE' 키워드는 컴파일러에게 지정된 열을 데이터베이스 개체로 사용하여 "type_name_db"라는 레코드 유형을 생성하도록 지시하는 것을 볼 수 있습니다.

이는 블록 내부가 아닌 개별 명령문으로 제공됩니다.

서브프로그램 수준 선언 구문:

Oracle PL/SQL 레코드 유형

DECLARE
TYPE <type_name> IS RECORD
(
<columnl> <datatype>,
);
BEGIN
<execution_section>;
END;

구문에서는 하위 프로그램 내에서만 "type_name"이라는 레코드 유형을 생성합니다.

두 선언 방법 모두 컬럼과 데이터 유형을 정의하는 방법은 유사합니다.

예 1: 데이터베이스 객체로서의 RECORD 유형

이번 프로그램에서는 데이터베이스 객체로 “Record type”을 생성하는 방법을 살펴보겠습니다. XNUMX개의 열이 있는 'emp_det' 레코드 유형을 생성하겠습니다. 열과 해당 데이터 유형은 다음과 같습니다.

  • EMP_NO(NUMBER)
  • EMP_NAME(VARCHAR2 (150))
  • 관리자(번호)
  • 급여 (숫자)
CREATE TYPE emp_det IS OBJECT
(
EMP_NO NUMBER,
EMP_NAME VARCHAR2(150),
MANAGER NUMBER,
SALARY NUMBER 
);
/

출력:

Type created

코드 설명 :

  • 위의 코드는 emp_det 유형을 데이터베이스 개체로 생성합니다.
  • 정의된 대로 emp_no, emp_name, 관리자 및 급여 4개의 열이 있습니다.
  • 이제 'emp_det'은 다른 것과 비슷합니다 데이터 형식 (NUMBER, VARCHAR@ 등) 그리고 전체 데이터베이스에서 볼 수 있습니다. 따라서 이는 전체 데이터베이스에서 이 유형의 변수를 선언하는 데 사용될 수 있습니다.

출력:

데이터베이스 수준에서 레코드 유형으로 'emp_det' 유형을 생성했습니다.

예 2: 하위 프로그램 수준의 레코드 유형 - 열 수준 액세스

이 예에서는 하위 프로그램 수준에서 레코드 유형을 생성하는 방법과 열 수준별로 값을 채우고 가져오는 방법을 살펴보겠습니다.

하위 프로그램 수준에서 'emp_det' Record_type을 생성하고 이를 사용하여 데이터를 채우고 표시할 것입니다.

Oracle PL/SQL 레코드 유형

DECLARE
TYPE emp_det IS RECORD
(
EMP_NO NUMBER, 
EMP_NAME VARCHAR2(150),
MANAGER NUMBER, 
SALARY NUMBER
);
guru99_emp_rec emp_det;
BEGIN
guru99_emp_rec.emp_no:= 1001;	
guru99_emp_rec.emp_name:=:'XXX';	
guru99_emp_rec.manager:= 1000;	
guru99_emp_rec.salary:=10000;	
dbms_output.put.line('Employee Detail');
dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no); 
dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name); 
dbms_output.put_line ('Employee Salary: ' ||guru99_emp_rec.salary); 
dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager);
END;
/

출력:

Employee Detail
Employee Number: 1001
Employee Name: XXX
Employee Salary: 10000 
Employee Manager Number: 1000

코드 설명 :

  • 코드 라인 2-8: 레코드 유형 'emp_det'은 데이터 유형 NUMBER, VARCHAR2, NUMBER, NUMBER의 emp_no, emp_name, 급여 및 관리자 열로 선언됩니다.
  • 코드 라인 9: guru99_emp_rec 변수는 'emp_det' 데이터 유형으로 선언됩니다. 이제 이 변수 위의 4개 필드/열을 모두 포함하는 값을 보유할 수 있습니다.
  • 코드 라인 11: 'guru99_emp_rec'의 'emp_no' 필드를 값 1001로 채웁니다.
  • 코드 라인 12: 'guru99_emp_rec'의 'emp_name' 필드를 값 XXX로 채웁니다.
  • 코드 라인 13: 'guru99_emp_rec'의 'manager' 필드를 값 1000으로 채웁니다.
  • 코드 라인 14: 'guru99_emp_rec'의 '급여' 필드를 값 10000으로 채웁니다.
  • 코드 라인 15-19: 출력에 'guru99_emp_rec' 값을 표시합니다.

예 3: 하위 프로그램 수준-행 수준 액세스의 레코드 유형

이 예에서는 하위 프로그램 수준에서 레코드 유형을 생성하는 방법과 이를 행 수준으로 채우는 방법을 살펴보겠습니다. 하위 프로그램 수준에서 'emp_det' Record_type을 생성하고 이를 사용하여 데이터를 채우고 표시할 것입니다.

Oracle PL/SQL 레코드 유형

DECLARE
TYPE emp_det IS RECORD
(
EMP_NO NUMBER,
EMP_NAME YARCHAR2( 150),
MANAGER NUMBER,
SALARY NUMBER
);
guru99_emp_rec emp_det;
BEGIN
INSERT INTO emp (emp_no, emp_name, salary, manager) VALUES (1002,'YYY',15000,1000);
COMMIT;
SELECT emp_no, emp_name, salary, manager INTO guru99_emp_rec FROM emp WHERE emp_no=1002;
dbms_output.put_line (‘Employee Detail’);
dbms_output.put_line (‘Employee Number: '||guru99_emp_rec.emp_no); 
dbms_output.put_line (‘Employee Name: '||guru99_emp_rec.emp_name); 
dbms_output.put_line (‘Employee Salary: '||guru99_emp_rec. salary); 
dbms_output.put_line (‘Employee Manager Number: '||guru99_emp_rec.manager);
END;
/

코드 설명 :

  • 코드 라인 2-8: 레코드 유형 'emp_det'은 데이터 유형 NUMBER, VARCHAR2, NUMBER, NUMBER의 emp_no, emp_name, 급여 및 관리자 열로 선언됩니다.
  • 코드 라인 9: guru99_emp_rec 변수는 'emp_det' 데이터 유형으로 선언됩니다. 이제 이 변수는 위의 4개 필드/열을 모두 포함하는 값을 보유할 수 있습니다.
  • 코드 라인 11: emp_no로 데이터 1002, emp_name으로 YYY, 급여로 15000, 관리자 번호로 1000으로 emp 테이블을 채웁니다.
  • 코드 라인 12: 위의 삽입 트랜잭션을 커밋합니다.
  • 코드 라인 13: 직원 번호 99에 대한 선택 쿼리에서 'guru1002_emp_rec' 변수를 행 수준 데이터로 채웁니다.
  • 코드 라인 15-19: 출력에 'guru99_emp_rec' 값을 표시합니다.

출력:

Employee Detail 
Employee Number: 1002 
Employee Name: YYY 
Employee Salary: 1000 
Employee Manager Number: 15000

참고 : 레코드 유형은 해당 값을 모든 출력 모드로 리디렉션하는 동안 열 수준에서만 액세스할 수 있습니다.