반응형






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
127
128
129
130
/* 
    변수
    - 변수의 생성 규칙
        : 반드시 문자로 시작해야 한다
        : 문자나 숫자, 특수문자를 포함할 수 있다
        : 변수명은 30byte이하여야 한다
        : 예약어(키워드)를 사용할 수 없다
        
    - 변수의 선언은 선언부(declare)에서 선언, 값으로 초기화 가능
    - 실행부에서 실행될 경우 값이 할당된다
    - 서브프로그램의 파라미터로 전달되기도 하며, 서브 프로그램의 출력결과를 저장하기도 한다
    
    - 변수 선언 예
    emp_no number(6,3) : 숫자를 저장하는 변수로 총6자리를 의미하며, 소수점 이하 3자리를 의미한다.
    emp_name varchar2(5) : 문자를 저장하는 변수로 총 5byte를 저장할 수 있다.
    emp_date date : 날짜를 저장하는 변수
    
    - 변수의데이터 타입
    char : 고정길이의 문자를 저장, 기본최소값 1 ~ 최대 32,767byte를 저장
    varchar2 : 가변길이의 문자를 저장, 기본값은 없다. 최대 32,767byte 값을 저장
    number(전체자릿수, 소수점이하 자릿수) : 전체자릿수와 소수점이하 자리 수를 가진 숫자를 저장 
        전체자리 수 범위는 1~38까지 가능하고, 소수점 자리수의 범위는 -84~127까지 가능
    
    binary_double : 부동 소수점 수를 저장, 9byte 필요
    date : 날짜 및 시간을 저장, 초단위로 저장
           날짜의 범위는 4712B.C ~ 9999A.D
    timestamp : date 타입을 확장한 개념, 연도 / 월 / 일 / 시 / 분 /초 및 소수로 표시되는 초단위를 저장
                자리수를 표현할 때는 0~9 범위의 정수를 사용, 기본값은 6
    
    - 참조변수 
        테이블명.필드명%TYPE 
        empNo empolyees.employee_id%TYPE  <- employees테이블의 employee_id타입을 empNo의 타입으로 사용하겠다는 의미
    
        emp_name employees.first_name%TYPE <- employees테이블의 first_name과 동일한 데이터 타입으로 선언
        
        empRow employees%ROWTYPE <- employees테이블의 모든 칼럼을 한꺼번에 저장하기위한 변수로 선언
    
*/
create table employees1 as 
select employee_id, salary, department_id
from employees;
 
select * from employees1;
 
set serveroutput on;
 
 
 
declare
    empNo employees1.employee_id%TYPE;
    empSalary employees1.salary%TYPE;
    
begin
    select employee_id, salary
    into empNo, empSalary
    from employees1
    where department_id = 10;
 
    dbms_output.put_line(empNo ||' '||empSalary);
    
end;
/
 
 
 
 
 
declare
emp_row employees1%RowType;
 
begin
    select * into emp_row
    from employees1
    where employee_id = 100;
    
    dbms_output.put_line( emp_row.employee_id || ' ' || emp_row.salary || ' ' || emp_row.department_id );
 
end;
/
 
 
 
 
create table row_test(
    no number,
    name varchar2(20),
    hdate date
);
 
 
create table row_test2 as
select * from row_test;
 
 
insert into row_test 
values(1,'아무개',sysdate);
 
 
insert into row_test
values(2,'홍길동',sysdate);
 
 
insert into row_test
values(3,'고길동',sysdate);
 
 
select * from row_test;
 
 
commit;
 
 
 
 
declare
c_rec row_test%ROWTYPE;
 
begin
    select * into c_rec
    from row_test
    where no=3;
    
    insert into row_test2
    values c_rec;
    
 end;
/
 
 
select * from row_test2;
cs


반응형

'프로그래밍 > SQL' 카테고리의 다른 글

[Oracle SQL] 콜렉션, 바인드 변수 사용  (0) 2017.09.30
[Oracle SQL] ROWTYPE 변수 및 복합변수 활용  (0) 2017.09.08
[Oracle SQL] PL/SQL  (0) 2017.08.21
[Oracle SQL] 계층형 쿼리  (0) 2017.08.17
[Oracle SQL] Sequence  (0) 2017.08.16

+ Recent posts