DataBase/oracle

oracle PL/SQl_rowType변수 및 복합변수 활용

HUCHUCHU 2020. 3. 22. 21:56

 

 

(1) 치환연산자 & 를 이용하여 사용자에게 값을 입력받아 연산하기!

1
2
3
4
5
6
7
8
9
10
 
declare
    no1 number := &no1;
    no2 number := &no2;
    vsum number;
begin
    vsum := no1 + no2;
    dbms_output.put_line('첫번째수 : ' || no1 || ', 두번째수: ' || no2 || ', 합계: '|| vsum);    
end;
/
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

  no1 number := &no1;

  no2 number := &no2;

  <== 변수를 선언할 때 사용자에게 입력 받겠다고 같이 설정

실행하면 값을 입력할 수 있는 창이 뜬다!

(2) 복합변수

    record Type 변수 지정방법

    -- 1) type 타입명 is record ();

    -- 2) 식별자 type 타입명 (식별자는 변수와 같은 개념) 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
declare
   type emp_rec is record                      <== type 명
    (
        emp_id      employees.employee_id%type,
        emp_name    employees.first_name%type,
        emp_job     employees.job_id%type
    );
    
   rec1    emp_rec;                 <== emp_rec에대한 식별자          
    
begin
    select employee_id, first_name, job_id
    into rec1
    from employees
    where department_id = 10;    
    
    dbms_output.put_line ('사번   이름  업무아이디');
    dbms_output.put_line (rec1.emp_id||' ' || rec1.emp_name || ' ' || rec1.emp_job);
end;
 
/
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

** emp_rec의 변수 rec1을 지정하지않고 그냥 값을 넣으면 안되는건가? 문법이니까 그냥 외우면 되는건가?_?...

 

(3) 복합변수 _ 값 입력받기

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
declare
    type emp_rec2 is record
    (
        emp_id          employees.employee_id%type,
        emp_name        employees.first_name%type,
        emp_email       employees.email%type,
        emp_salary      employees.salary%type
    );
    
    rec2    emp_rec2;
    
    -- 사용자에게 사원번호를 입력받기위해 변수 생성
    vemp_id employees.employee_id%type := '&empid';     -- 여기 왜 '' 형태로 쓰는건지 모르겠당....
                                                     -- 오잉 상관이 없나 ''형태로 안써도 에러안난고 
위에도 ''형태로 써도 에러안난다
    
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;
 
/
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter