[    ORACLE rowType 변수 및 복합변수 활용 예    ]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
--[ rowType 변수 및 복합변수 활용의 예 ]
--    : rowType 변수를 활용한 데이터의 변경
 
DECLARE
  c_rec row_test%ROWTYPE;
BEGIN
  select * into c_rec
  from row_test
  where no = 3;
 
  -- 대입연산자는 := 를 사용해야 한다.(주의!) 
  c_rec.name := '강길동';
   
  -- row(행 전체)를 c_rec로 바꾸는 방법
  update row_test2 set row = c_rec
  where no = 3;
   
END;
/
 
select * from row_test2;
 
 
-- 사용자로 부터 두개의 숫자를 입력받아서 합을 구하는 예
  --  치환연산자 & 사용)
   
  set SERVEROUTPUT ON;
   
  declare
    no1 number := &no1; -- 사용자로부터 입력을 받아 값을 할당
    no2 number := &no2;
    sumV number;
  begin
    sumV := no1 + no2;
    DBMS_OUTPUT.put_line('첫번째 수'||no1||'두번째 수'||no2||'합'||sumV);
  end;
  /
   
-- 복합변수 )
-- 직접 복합 타입을 지정할 수도 있다.
  -- record Type 변수 지정 방법
      --1. type 타입명 is record();
      --2. 식별자 타입명
   
  declare
    type emp_rec is record
    (emp_id employees.employee_id%type,
     emp_name employees.first_name%type,
     emp_job employees.job_id%type
    );
     
    rec1 emp_rec; -- 위에서 정의한 타입을 사용해 변수 선언
  begin
    select employee_id, first_name, job_id into rec1
    from employees
    where department_id = 10;
     
    DBMS_OUTPUT.put_line('사번    이름    업무ID');
    DBMS_OUTPUT.PUT_LINE(rec1.emp_id||'   '||rec1.emp_name||'   '||rec1.emp_job);
  end;
  /
   
   
declare
  type emp_rec2 is record
  (
    emp_id employees.employee_id%type,
    emp_name employees.last_name%type,
    emp_email employees.email%type,
    emp_salary employees.salary%type
  );
   
  rec2 emp_rec2;
  -- 사원번호는 사용자로부터 입력받도록
  vemp_id employees.employee_id%type := '&사번';
begin
  select employee_id, last_name, NVL(email,'없음'), salary
    into rec2
  from employees
  where employee_id = vemp_id; -- 사원번호가 사용자로부터 입력받은 것과 같은 정보
   
  DBMS_OUTPUT.put_line('사번:'||rec2.emp_id);
   
  DBMS_OUTPUT.put_line('이름:'||rec2.emp_name);
   
  DBMS_OUTPUT.put_line('이메일;'||rec2.emp_email);
   
  DBMS_OUTPUT.put_line('월급:'||rec2.emp_salary);
end;
/
 
 
 
-- 지금까지 공부한 PL/SQL 부분 연습하기 --
declare
  -- 1.일반 변수 선언법
  no number(10);
  strValue varchar2(20);
  -- 2.기존 테이블의 특정 필드의 타입으로 선언하는 방법
  emp_id employees.employee_id%TYPE;
  emp_name employees.first_name%TYPE; -- employees테이블의 first_name 필드와 같은 타입으로 선언
  -- 3.특정 기존 테이블과 동일한 복합 타입으로 지정하는 방법
  emp_rec employees%ROWTYPE;
  dep_rec departments%ROWTYPE;
  -- 4.사용자에게 입력을 받아 선언한 변수에 데이터를 넣는 방법
  input_data row_test.no%TYPE := '&no번호';
  -- 5.사용자 지정 복합 타입으로 변수를 선언하는 방법
  type myType is record
  (
    my_no row_test.no%TYPE,
    my_name row_test.name%type,
    my_hdate row_test.hdate%type
  );
  myDefVal myType;
begin
  select no, name, hdate into myDefVal
  from row_test
  where no = 3;
   
  myDefVal.my_name := '수정합니다.';
  update row_test set row = myDefVal
  where no = input_data; -- 사용자가 입력한 no번호에 해당하는 필드 값을 수정하도록...
   
end;
/
select * from row_test;


+ Recent posts