λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

ν”„λ‘œμ νŠΈ/DB

[DB] 병원 관리 ν”„λ‘œκ·Έλž¨(2)

728x90

 

2021.10.20.-2021.12.14.

​

병원에 μˆ˜λ§Žμ€ 데이터가 μ‘΄μž¬ν•˜μ—¬ ν•˜λ‚˜ν•˜λ‚˜ ν™•μΈν•˜κΈ°μ—λŠ” 어렀움이 μžˆμ–΄ 병원 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό 톡해 각쒅 μ˜μ‚¬ 및 κ°„ν˜Έμ‚¬μ˜ μ§„λ£Œκ³Όλ₯Ό μ†μ‰½κ²Œ 검색할 수 μžˆλ‹€.

​

ν™˜μžμ˜ μž…μ› 정보 뿐만 μ•„λ‹ˆλΌ ν™˜μžκ°€ μ˜μ‚¬μ—κ²Œ 받은 μ§„λ£Œ λ‚΄μš©μ„ μ‘°νšŒν•˜μ—¬

ν•œλˆˆμ— μ›ν•˜λŠ” 데이터λ₯Ό κ²€μƒ‰ν•˜μ—¬ λ²ˆκ±°λ‘œμ›€μ„ 쀄일 수 μžˆλ‹€.

​

λ˜ν•œ ν™˜μžκ°€ μ˜ˆμ•½μ„ ν•˜κ³ , μ˜ˆμ•½ 내역을 λΉ λ₯΄κ²Œ 확인할 수 μžˆλ„λ‘ ν•œλ‹€.

​

κ΄€κ³„μžλŠ” ν™˜μžμ˜ μ§„λ£ŒκΈ°λ‘ 및 μ˜ˆμ•½ 기둝을 관리할 수 μžˆλ„λ‘ ν•˜κ³ ,

κ΄€λ¦¬μžλŠ” κ΄€κ³„μž 및 ν™˜μžμ˜ 데이터λ₯Ό 관리할 수 μžˆλ„λ‘ ν•œλ‹€.

​

​

​

​

기쑴의 병원 관리 ν”„λ‘œκ·Έλž¨μ— 트리거 및 μ €μž₯ ν”„λ‘œμ‹œμ € 등을 μΆ”κ°€ν•˜μ—¬ ν™œμš©ν•˜μ˜€λ‹€.

​

 


μš”κ΅¬μ‚¬ν•­ λͺ…μ„Έμ„œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

​

1) μ˜μ‚¬λŠ” 고유의 μ˜μ‚¬λ²ˆν˜Έ, μ§„λ£Œκ³Όλͺ©, 이름, μ „ν™”λ²ˆν˜Έ, μ£Όμ†Œ, λΉ„λ°€λ²ˆν˜Έλ₯Ό κ°€μ§„λ‹€.

2) κ°„ν˜Έμ‚¬λŠ” 고유의 κ°„ν˜Έμ‚¬λ²ˆν˜Έ, 직급, 이름, μ „ν™”λ²ˆν˜Έ, μ£Όμ†Œ, μ§„λ£Œκ³Όλͺ©, 과번호, λΉ„λ°€λ²ˆν˜Έλ₯Ό κ°€ μ§„λ‹€.

3) ν™˜μžλ‘œ λ“±λ‘ν•˜λ €λ©΄ 고유의 ν™˜μžλ²ˆν˜Έ, 이름, μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ, μ „ν™”λ²ˆν˜Έ, μ£Όμ†Œ, μ‹ μž₯(ν‚€), λͺΈλ¬΄κ²Œ, ν˜ˆμ•‘ν˜•, 성별, μ§„λ£Œλ‚΄μš©, λΉ„λ°€λ²ˆν˜Έ μž…λ ₯을 ν•΄μ•Όν•œλ‹€.

4) μž…μ›μ€ 고유의 μž…μ›μΌ, 퇴원일, μž…μ›μ‹€ 정보λ₯Ό κ°–λŠ”λ‹€.

5) μ§„λ£Œκ³ΌλŠ” 고유의 과번호, 과이름, μ „ν™”λ²ˆν˜Έ 정보λ₯Ό κ°–λŠ”λ‹€.

6) μ˜μ‚¬λŠ” μ—¬λŸ¬ λͺ…μ˜ ν™˜μžλ₯Ό μ§„μ°°ν•  수 있고, ν™˜μžλ„ μ—¬λŸ¬ λͺ…μ˜ μ˜μ‚¬μ—κ²Œ μ§„λ£Œλ°›μ„ 수 μžˆλ‹€.

7) μ§„λ£Œλ₯Ό λ°›μœΌλ©΄ μ§„λ£Œλ²ˆν˜Έ, μ§„λ£ŒμΌμ΄ μ €μž₯λœλ‹€.

8) κ°„ν˜Έμ‚¬λŠ” μ—¬λŸ¬ λͺ…μ˜ ν™˜μžλ₯Ό μ²˜μΉ˜ν•  수 있으며 μ΄λ•Œ 처치일, μ²˜μΉ˜λ‚΄μš©μ΄ μ €μž₯λœλ‹€.

9) μ§„λ£Œλ‚΄μš©μ€ 닀쀑값을 κ°€μ§ˆ 수 μžˆλ‹€. (ex. μ•½1은 ν•΄μ—΄μ œ, μ•½2λŠ” μ§„ν†΅μ œ..etc)

10) μ˜μ‚¬μ™€ κ°„ν˜Έμ‚¬λŠ” ν•˜λ‚˜μ˜ 전곡(μ§„λ£Œκ³Όλͺ©)을 κ°€μ§„λ‹€.

11) ν™˜μžλŠ” μž…μ›ν•  수 있으며 μž…μ›μ€ ν™˜μžκ°€ μ‘΄μž¬ν•  λ•Œμ—λ§Œ μžˆμ„ 수 μžˆλŠ” μ•½μ„±κ°œμ²΄μ΄λ‹€.

12) ν™˜μžλŠ” μ—¬λŸ¬ λͺ… μž…μ›ν•  수 μžˆλ‹€.

13) ν™˜μžλŠ” μ˜ˆμ•½ν•  수 있으며 μ˜ˆμ•½μ€ ν™˜μžκ°€ μ‘΄μž¬ν•  λ•Œμ—λ§Œ μžˆμ„ 수 μžˆλŠ” μ•½μ„±κ°œμ²΄μ΄λ‹€.

14) μ˜ˆμ•½μ€ 고유의 μ˜ˆμ•½μΌ, μ˜ˆμ•½λ²ˆν˜Έ, μ˜ˆμ•½λ‚΄μš©μ΄ μžˆλ‹€.

15) κ΄€λ¦¬μžλŠ” 고유의 ID와 λΉ„λ°€λ²ˆν˜Έλ₯Ό κ°€μ§„λ‹€.

16) ν•˜λ‚˜μ˜ κ΄€λ¦¬μžλŠ” μ—¬λŸ¬ λͺ…μ˜ μ˜μ‚¬, κ°„ν˜Έμ‚¬, ν™˜μžλ₯Ό 관리할 수 μžˆλ‹€.

17) 3년이상 μ§„λ£Œλ‚΄μ—­ 갱신이 μ—†λŠ” ν™˜μžλŠ” 휴면으둜 μ „ν™˜λ˜κ³ , νœ΄λ©΄λ²ˆν˜Έκ°€ μƒμ„±λœλ‹€.

​

​

​


 

E-R λ‹€μ΄μ–΄κ·Έλž¨μ€ λ‹€μŒκ³Ό 같이 λ³€κ²½λ˜μ—ˆλ‹€.

​

ERD

 

 

​

​


λ³€κ²½λœ μŠ€ν‚€λ§ˆλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

​

​

​

μ§„λ£Œκ³Ό λ¦΄λ ˆμ΄μ…˜ ( 과번호, 과이름, μ „ν™”λ²ˆν˜Έ )

 

μ§„λ£Œ λ¦΄λ ˆμ΄μ…˜ ( μ§„λ£Œλ²ˆν˜Έ, μ˜μ‚¬λ²ˆν˜Έ, ν™˜μžλ²ˆν˜Έ, μ§„λ£ŒμΌ )

 

μ˜μ‚¬ λ¦΄λ ˆμ΄μ…˜ ( μ˜μ‚¬λ²ˆν˜Έ, 이름, μ „ν™”λ²ˆν˜Έ, μ£Όμ†Œ, 과번호, λΉ„λ°€λ²ˆν˜Έ)

 

κ°„ν˜Έμ‚¬ λ¦΄λ ˆμ΄μ…˜ ( κ°„ν˜Έμ‚¬λ²ˆν˜Έ, 이름, μ „ν™”λ²ˆν˜Έ, μ£Όμ†Œ, 과번호,λΉ„λ°€λ²ˆν˜Έ )

 

μž…μ› λ¦΄λ ˆμ΄μ…˜ ( ν™˜μžλ²ˆν˜Έ, μž…μ›μΌ, 퇴원일, μž…μ›μ‹€ )

 

ν™˜μž λ¦΄λ ˆμ΄μ…˜ (ν™˜μžλ²ˆν˜Έ, 이름, μ£Όμ†Œ, μ „ν™”λ²ˆν˜Έ, μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ, μ‹ μž₯(ν‚€), λͺΈλ¬΄κ²Œ, ν˜ˆμ•‘ν˜•, 성별, κ°„ν˜Έμ‚¬λ²ˆν˜Έ, 처치일, μ²˜μΉ˜λ‚΄μš©, λΉ„λ°€λ²ˆν˜Έ)

 

ν™˜μž-μ§„λ£Œλ‚΄μš© λ¦΄λ ˆμ΄μ…˜ (ν™˜μžλ²ˆν˜Έ, μ§„λ£Œλ‚΄μš©)

 

μ˜ˆμ•½ λ¦΄λ ˆμ΄μ…˜ (ν™˜μžλ²ˆν˜Έ, μ˜ˆμ•½λ²ˆν˜Έ, μ˜ˆμ•½μΌ, μ˜ˆμ•½λ‚΄μš©, λ‹΄λ‹Ήμ˜μ‚¬)

 

κ΄€λ¦¬μž λ¦΄λ ˆμ΄μ…˜ (ID,λΉ„λ°€λ²ˆν˜Έ)

 

κ³„μ •μ „ν™˜ λ¦΄λ ˆμ΄μ…˜(휴면번호, ν™˜μžλ²ˆν˜Έ,이름, μ£Όμ†Œ, μ „ν™”λ²ˆν˜Έ, μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ, μ‹ μž₯(ν‚€), λͺΈλ¬΄κ²Œ, ν˜ˆμ•‘ν˜•, 성별, λΉ„λ°€λ²ˆν˜Έ)

​

​


이 ν”„λ‘œκ·Έλž¨μ˜ κΈ°λŠ₯은 λ‹€μŒκ³Ό κ°™λ‹€.

​

μ €μž₯ ν”„λ‘œμ‹œμ €λ₯Ό μ΄μš©ν•˜μ—¬ ν™˜μžμ˜ μ§„λ£Œλ‚΄μš©μ—μ„œ νŠΉμ • μ§ˆλ³‘μ— λŒ€ν•œ ν™˜μžλ“€μ˜ 평균연령을 κ΅¬ν•˜μ—¬ 좜λ ₯ν•˜λŠ” κΈ°λŠ₯ μˆ˜ν–‰ (예, "κ³ ν˜ˆμ••" μ§„λ£Œλ‚΄μš©μ„ κ°€μ§„ ν™˜μžλ“€μ˜ 평균 연령을 κ³„μ‚°ν•˜μ—¬ μ§ˆλ³‘λ‚΄μš© : κ³ ν˜ˆμ•• , 평균연령 : 43.2μ„Έ 처럼 좜λ ₯)

​

1) 처치일이 3λ…„ 이상 κ°±μ‹ λ˜μ§€ μ•ŠμœΌλ©΄ κ·Έ ν™˜μžλ₯Ό νœ΄λ©΄ν…Œμ΄λΈ” 데이터에 μ‚½μž…ν•˜λŠ” κΈ°λŠ₯ μˆ˜ν–‰ (예, ν™˜μž ν…Œμ΄λΈ”μ˜ 처치일이 ν˜„μž¬λ‘œλΆ€ν„° 3λ…„ 이상 κ°±μ‹ λ˜μ§€ μ•Šμ€ 경우, νœ΄λ©΄ν…Œμ΄λΈ”μ— ν™˜μžν…Œμ΄λΈ”μ˜ μŠ€ν‚€λ§ˆκ°€ μ‚½μž…λ¨.)

​

2) μ§„λ£Œν…Œμ΄λΈ”μ΄ κ°±μ‹ (μ‚½μž…, μ‚­μ œ, λ³€κ²½)될 λ•Œλ§ˆλ‹€ κ·Έ κ°±μ‹ λ‚΄μš©μ„ ν™˜μž-μ§„λ£Œλ‚΄μš© ν…Œμ΄λΈ”μ— λ°˜μ˜ν•˜λŠ” κΈ°λŠ₯ μˆ˜ν–‰ (예, μ§„λ£Œ λ¦΄λ ˆμ΄μ…˜μ— μƒˆλ‘œμš΄ μ§„λ£Œλ²ˆν˜Έκ°€ 좔가될 경우, ν™˜μž-μ§„λ£Œλ‚΄μš©μ— ν™˜μžλ²ˆν˜Έμ™€ μ§„λ£Œλ‚΄μš©μ΄ λ°”λ‘œ 갱신됨.)

​

 


​

ALTER session set "_ORACLE_SCRIPT"=true;
DROP USER HOSPITAL CASCADE; -- κΈ°μ‘΄ μ‚¬μš©μž μ‚­μ œ(ν˜„μž¬ μ ‘μ†λ˜μ–΄ 있으면 μ‚­μ œ μ•ˆ 됨)
	-- CASCADE option : κ΄€λ ¨ μŠ€ν‚€λ§ˆ κ°œμ²΄λ“€λ„ ν•¨κ»˜ μ‚­μ œ.  DefaultλŠ” No Action
CREATE USER HOSPITAL IDENTIFIED BY 1234  -- μ‚¬μš©μž ID : hmart, λΉ„λ°€λ²ˆν˜Έ : 1234
    DEFAULT TABLESPACE USERS
    TEMPORARY TABLESPACE TEMP;
GRANT connect, resource, dba TO HOSPITAL;-- κΆŒν•œ λΆ€μ—¬

 

 

각각의 ν…Œμ΄λΈ”μ„ μƒμ„±ν•œλ‹€.

 

create table μ§„λ£Œκ³Ό(
    과번호 INT NOT NULL,
    과이름 VARCHAR(20) NOT NULL,
    μ „ν™”λ²ˆν˜Έ CHAR(20),
    PRIMARY KEY(과번호)
);
create table μ˜μ‚¬(
    μ˜μ‚¬λ²ˆν˜Έ INT NOT NULL,
    이름 CHAR(10) NOT NULL,
    μ „ν™”λ²ˆν˜Έ CHAR(20),
    μ£Όμ†Œ CHAR(10),
    과번호 INT,
    λΉ„λ°€λ²ˆν˜Έ varchar(40),
    PRIMARY KEY(μ˜μ‚¬λ²ˆν˜Έ),
    FOREIGN KEY(과번호) REFERENCES μ§„λ£Œκ³Ό(과번호) 
);
create table κ°„ν˜Έμ‚¬(
    κ°„ν˜Έμ‚¬λ²ˆν˜Έ INT NOT NULL,
    이름 CHAR(10) NOT NULL,
    μ „ν™”λ²ˆν˜Έ CHAR(20),
    μ£Όμ†Œ CHAR(10),
    과번호 INT,
    λΉ„λ°€λ²ˆν˜Έ varchar(40),
    PRIMARY KEY (κ°„ν˜Έμ‚¬λ²ˆν˜Έ),
    FOREIGN KEY(과번호) REFERENCES μ§„λ£Œκ³Ό(과번호)
);
create table ν™˜μž(
    ν™˜μžλ²ˆν˜Έ INT NOT NULL,
    이름 CHAR(10) NOT NULL,
    μ „ν™”λ²ˆν˜Έ CHAR(20),
    μ£Όμ†Œ CHAR(10),
    μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ CHAR(20),
    μ‹ μž₯ NUMBER(5,1),
    λͺΈλ¬΄κ²Œ NUMBER(5,1),
    ν˜ˆμ•‘ν˜• VARCHAR(4),
    성별 CHAR(6),
    처치일 DATE,
    μ²˜μΉ˜λ‚΄μš© VARCHAR(20),
    κ°„ν˜Έμ‚¬λ²ˆν˜Έ INT,
    λΉ„λ°€λ²ˆν˜Έ varchar(40),
    PRIMARY KEY (ν™˜μžλ²ˆν˜Έ),
    FOREIGN KEY(κ°„ν˜Έμ‚¬λ²ˆν˜Έ) REFERENCES κ°„ν˜Έμ‚¬(κ°„ν˜Έμ‚¬λ²ˆν˜Έ),
    CHECK (ν˜ˆμ•‘ν˜• IN ('A','B','O','AB'))
);
create table μ§„λ£Œ(
    μ§„λ£Œλ²ˆν˜Έ INT NOT NULL,
    μ§„λ£ŒμΌ DATE,
    μ˜μ‚¬λ²ˆν˜Έ INT,
    ν™˜μžλ²ˆν˜Έ INT, 
    μ§„λ£Œλ‚΄μš© VARCHAR2(20),
    PRIMARY KEY(μ§„λ£Œλ²ˆν˜Έ, μ˜μ‚¬λ²ˆν˜Έ, ν™˜μžλ²ˆν˜Έ),
    FOREIGN KEY(μ˜μ‚¬λ²ˆν˜Έ) REFERENCES μ˜μ‚¬(μ˜μ‚¬λ²ˆν˜Έ) ON DELETE CASCADE,
    FOREIGN KEY(ν™˜μžλ²ˆν˜Έ) REFERENCES ν™˜μž(ν™˜μžλ²ˆν˜Έ) ON DELETE CASCADE
);
create table μž…μ›(
    μž…μ›μΌ DATE NOT NULL,
    퇴원일 DATE,
    μž…μ›μ‹€ INT,
    ν™˜μžλ²ˆν˜Έ INT,
    PRIMARY KEY(ν™˜μžλ²ˆν˜Έ, μž…μ›μΌ),
    FOREIGN KEY(ν™˜μžλ²ˆν˜Έ) REFERENCES ν™˜μž(ν™˜μžλ²ˆν˜Έ) ON DELETE CASCADE
);
create table μ§„λ£Œλ‚΄μš©(
μ§„λ£Œλ‚΄μš© VARCHAR(20) NOT NULL,
ν™˜μžλ²ˆν˜Έ INT,
PRIMARY KEY(μ§„λ£Œλ‚΄μš©, ν™˜μžλ²ˆν˜Έ),
FOREIGN KEY(ν™˜μžλ²ˆν˜Έ) REFERENCES ν™˜μž(ν™˜μžλ²ˆν˜Έ) ON DELETE CASCADE
);
create table κ΄€λ¦¬μž(
    아이디 varchar(20),
    λΉ„λ°€λ²ˆν˜Έ varchar(40),
    primary key(아이디)
);
create table μ˜ˆμ•½(
    ν™˜μžλ²ˆν˜Έ INT,
    μ˜ˆμ•½λ²ˆν˜Έ INT,
    μ˜ˆμ•½μΌ DATE,
    μ˜ˆμ•½λ‚΄μš© varchar(20),
    μ˜μ‚¬λ²ˆν˜Έ int,
    primary key(ν™˜μžλ²ˆν˜Έ,μ˜ˆμ•½λ²ˆν˜Έ),
    FOREIGN KEY(μ˜μ‚¬λ²ˆν˜Έ) REFERENCES μ˜μ‚¬(μ˜μ‚¬λ²ˆν˜Έ) ON DELETE CASCADE,
    FOREIGN KEY(ν™˜μžλ²ˆν˜Έ) REFERENCES ν™˜μž(ν™˜μžλ²ˆν˜Έ) ON DELETE CASCADE
);
create table νœ΄λ©΄κ³„μ •(
    ν™˜μžλ²ˆν˜Έ INT NOT NULL,
  이름 CHAR(10) NOT NULL,
 μ „ν™”λ²ˆν˜Έ CHAR(20),
  μ£Όμ†Œ CHAR(10),
  μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ CHAR(20),
μ‹ μž₯ NUMBER(5,1),
  λͺΈλ¬΄κ²Œ NUMBER(5,1),
    ν˜ˆμ•‘ν˜• VARCHAR(4),
  성별 CHAR(6),
  처치일 DATE,
  μ²˜μΉ˜λ‚΄μš© VARCHAR(20),
κ°„ν˜Έμ‚¬λ²ˆν˜Έ INT,
  λΉ„λ°€λ²ˆν˜Έ varchar(40),
  CHECK (ν˜ˆμ•‘ν˜• IN ('A','B','O','AB')),
   휴면번호 INT NOT NULL,
  PRIMARY KEY (휴면번호)
);

 

 

 

 

계정 λ‘œκ·ΈμΈμ„ μœ„ν•˜μ—¬ λΉ„λ°€λ²ˆν˜Έλ₯Ό μΆ”κ°€ν•˜μ˜€κ³ ,

각각의 데이터λ₯Ό μΆ”κ°€ν•œλ‹€.

 

Insert INTO κ΄€λ¦¬μž(아이디, λΉ„λ°€λ²ˆν˜Έ) values ('admin','admin');

μ˜ˆμ•½λ²ˆν˜Έλ₯Ό μœ„ν•œ sequenceλ₯Ό 생성해쀀닀. 1λΆ€ν„° μ‹œμž‘ν•˜λ©°, 1μ”© μ¦κ°€λœλ‹€.

CREATE SEQUENCE μ˜ˆμ•½λ²ˆν˜Έ --μ‹œν€€μŠ€μ΄λ¦„ EX_SEQ
INCREMENT BY 1 --증감숫자 1
START WITH 1;

 

 

 


μ‚¬μš©λœ μ €μž₯ ν”„λ‘œμ‹œμ €λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

--주민번호둜 λ‚˜μ΄κ΅¬ν•˜λŠ” μ—΄ μΆ”κ°€ν•˜κΈ°--


alter table ν™˜μž add λ‚˜μ΄ NUMBER;

create or replace PROCEDURE SPC_AGE AS

    V_ν™˜μžλ²ˆν˜Έ NUMBER;
    V_λ‚˜μ΄ NUMBER :=0;
    V_μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ CHAR(20);
    
    CURSOR C IS select ν™˜μžλ²ˆν˜Έ, λ‚˜μ΄, μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ from ν™˜μž;
    BEGIN
        open c;
        Loop
            Fetch c into V_ν™˜μžλ²ˆν˜Έ, V_λ‚˜μ΄, V_μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ;
            EXIT when c%NOTFOUND;
            SELECT μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ into V_μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ FROM ν™˜μž where ν™˜μžλ²ˆν˜Έ=V_ν™˜μžλ²ˆν˜Έ;
            IF SUBSTR(V_μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ,8,1)='1' or SUBSTR(V_μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ,8,1)='2' THEN
            BEGIN
                V_λ‚˜μ΄:=EXTRACT(YEAR FROM SYSDATE)-TO_NUMBER('19' || SUBSTR(V_μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ,1,2)) +1;
                update ν™˜μž set λ‚˜μ΄=V_λ‚˜μ΄ Where ν™˜μžλ²ˆν˜Έ=V_ν™˜μžλ²ˆν˜Έ;
            END;
            ELSE 
            BEGIN
                V_λ‚˜μ΄:=EXTRACT(YEAR FROM SYSDATE)-TO_NUMBER('20' || SUBSTR(V_μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ,1,2)) +1;
                update ν™˜μž set λ‚˜μ΄=V_λ‚˜μ΄ Where ν™˜μžλ²ˆν˜Έ=V_ν™˜μžλ²ˆν˜Έ;
            END;
        END IF;
    END LOOP;
    CLOSE C;
END;

SET SERVEROUTPUT ON;
EXECUTE SPC_AGE();

SPC_AGE ν”„λ‘œμ‹œμ €λŠ” ‘ν™˜μž’ ν…Œμ΄λΈ”μ˜ μ£Όλ―Όλ“±λ‘λ²ˆν˜Έλ₯Ό μ΄μš©ν•˜μ—¬ ν™˜μžμ˜ λ‚˜μ΄λ₯Ό κ³„μ‚°ν•˜λŠ” ν”„λ‘œμ‹œμ €μ΄λ‹€.

​

alter table ν™˜μž add λ‚˜μ΄ NUMBER;λ₯Ό μ΄μš©ν•˜μ—¬ ν™˜μž ν…Œμ΄λΈ”μ— μƒˆλ‘œμš΄ λ‚˜μ΄ μ»¬λŸΌμ„ μΆ”κ°€ν•˜μ—¬

μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ 8λ²ˆμ§Έκ°€ 1 λ˜λŠ” 2이면 2000λ…„ μ΄μ „μ΄λ―€λ‘œ

μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ μ•ž λ‘μžλ¦¬μΈ 연도에 19λ₯Ό λΆ™μ—¬ λ‚˜μ΄λ₯Ό ν˜„μž¬ 2021λ…„λ„μ—μ„œ λΊ€ ν›„ +1을 λ”ν•˜μ—¬ κ΅¬ν•œλ‹€.

​

ELSEλŠ” 8λ²ˆμ§Έκ°€ 3 λ˜λŠ” 4인 2000λ…„ 이후λ₯Ό λ§ν•˜λ―€λ‘œ μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ μ•ž λ‘μžλ¦¬λ₯Ό 20κ³Ό 합쳐 ν˜„μž¬ λ…„λ„μ—μ„œ λ‚˜μ΄λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œμ‹œμ €μ΄λ‹€.

​

CREATE OR REPLACE NONEDITIONABLE PROCEDURE sp_평균(AVGs out SYS_REFCURSOR) AS
BEGIN
        open AVGs for
            SELECT μ§„λ£Œλ‚΄μš©, AVG(ν™˜μž.λ‚˜μ΄) as ν‰κ· λ‚˜μ΄ FROM ν™˜μž, μ§„λ£Œλ‚΄μš© WEHRE μ§„λ£Œλ‚΄μš©.ν™˜μžλ²ˆν˜Έ=ν™˜μž.ν™˜μžλ²ˆν˜Έ GROUP BY μ§„λ£Œλ‚΄μš©;
END;

SP_평균 ν”„λ‘œμ‹œμ €λŠ” μ „μ²΄μ˜ μ§„λ£Œλ‚΄μš©μ— λŒ€ν•œ ν™˜μžλ“€μ˜ 평균 λ‚˜μ΄λ₯Ό κ΅¬ν•˜λŠ” κΈ°λŠ₯을 μˆ˜ν–‰ν•œλ‹€.

​

cursor을 ν†΅ν•˜μ—¬ μ—¬λŸ¬ 행을 리턴해주며, JDBCμ—μ„œ callablestatementλ₯Ό ν†΅ν•˜μ—¬ 톡계λ₯Ό 좜λ ₯ν•  λ•Œ μ‚¬μš©ν•œλ‹€.

​

group byλ₯Ό μ΄μš©ν•˜μ—¬ μ§„λ£Œλ‚΄μš©μ„ 그룹으둜 μ§„λ£Œλ‚΄μš©κ³Ό ν™˜μžμ˜ ν‰κ· λ‚˜μ΄λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œμ‹œμ €λ‹€.

 

 


μ‚¬μš©λœ νŠΈλ¦¬κ±°λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

 

create or replace NONEDITIONABLE trigger T_treat
    after insert or delete or update
    on μ§„λ£Œ
    for each row
BEGIN

    if inserting then
        insert into μ§„λ£Œλ‚΄μš©(μ§„λ£Œλ‚΄μš©, ν™˜μžλ²ˆν˜Έ) values(:NEW.μ§„λ£Œλ‚΄μš©, :NEW.ν™˜μžλ²ˆν˜Έ);

    elsif deleting then
        delete from μ§„λ£Œλ‚΄μš© where μ§„λ£Œλ‚΄μš©.ν™˜μžλ²ˆν˜Έ=:OLD.ν™˜μžλ²ˆν˜Έ;

    elsif updating then 
        update μ§„λ£Œλ‚΄μš© set μ§„λ£Œλ‚΄μš©.ν™˜μžλ²ˆν˜Έ=:NEW.ν™˜μžλ²ˆν˜Έ where μ§„λ£Œλ‚΄μš©.ν™˜μžλ²ˆν˜Έ=:OLD.ν™˜μžλ²ˆν˜Έ;
        update μ§„λ£Œλ‚΄μš© set μ§„λ£Œλ‚΄μš©.μ§„λ£Œλ‚΄μš©=:NEW.μ§„λ£Œλ‚΄μš© where μ§„λ£Œλ‚΄μš©.ν™˜μžλ²ˆν˜Έ=:OLD.ν™˜μžλ²ˆν˜Έ;
    END IF;
END T_treat;


insert into μ§„λ£Œ(μ§„λ£Œλ²ˆν˜Έ, μ§„λ£ŒμΌ, μ˜μ‚¬λ²ˆν˜Έ, ν™˜μžλ²ˆν˜Έ, μ§„λ£Œλ‚΄μš©) values (700,'2021-12-02',21, 100, 'λ‡Œμ‘Έμ¦');
delete from μ§„λ£Œ where ν™˜μžλ²ˆν˜Έ=100 and μ§„λ£Œλ‚΄μš©='λ‡Œμ‘Έμ¦' and μ§„λ£Œλ²ˆν˜Έ=700;
   

​T_treat νŠΈλ¦¬κ±°λŠ” μ§„λ£Œν…Œμ΄λΈ”μ΄ 갱신될 λ•Œλ§ˆλ‹€ κ·Έ κ°±μ‹ λ‚΄μš©μ„ μ§„λ£Œλ‚΄μš© ν…Œμ΄λΈ”μ— λ°˜μ˜ν•˜λŠ”

κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” νŠΈλ¦¬κ±°μ΄λ‹€.

 

--νœ΄λ©΄κ³„μ • λ§Œλ“œλŠ” 트리거--

create sequence 휴면seq;

create or replace trigger T_νœ΄λ©΄κ³„μ •
    after delete on ν™˜μž
    for each row
    
begin
    insert into νœ΄λ©΄κ³„μ • values(:OLD.ν™˜μžλ²ˆν˜Έ, :OLD.이름, :OLD.μ „ν™”λ²ˆν˜Έ, :OLD.μ£Όμ†Œ, :OLD.μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ, :OLD.μ‹ μž₯, :OLD.λͺΈλ¬΄κ²Œ, :OLD.ν˜ˆμ•‘ν˜•,:OLD.성별, :OLD.처치일, :OLD.μ²˜μΉ˜λ‚΄μš©, :OLD.κ°„ν˜Έμ‚¬λ²ˆν˜Έ, :OLD.λΉ„λ°€λ²ˆν˜Έ, 휴면seq.nextval);
end T_νœ΄λ©΄κ³„μ •;



--3λ…„ μ΄ν›„λ‘œ μ§„λ£ŒμΌ κ°±μ‹  μ•ˆλœ ν™˜μžλŠ” νœ΄λ©΄κ³„μ •μœΌλ‘œ μ „ν™˜
DELETE FROM ν™˜μž
where exists (select μ§„λ£Œ.ν™˜μžλ²ˆν˜Έ
              from μ§„λ£Œ
              where ν™˜μž.ν™˜μžλ²ˆν˜Έ=μ§„λ£Œ.μ§„λ£Œλ²ˆν˜Έ and μ§„λ£Œ.μ§„λ£ŒμΌ < ADD_MONTHS(SYSDATE, -36));

T_νœ΄λ©΄κ³„μ • νŠΈλ¦¬κ±°λŠ” 처치일이 3λ…„ 이상 κ°±μ‹ λ˜μ§€ μ•ŠμœΌλ©΄

κ·Έ ν™˜μžλ₯Ό νœ΄λ©΄ν…Œμ΄λΈ” 데이터에 μ‚½μž…ν•˜λŠ” κΈ°λŠ₯을 μˆ˜ν–‰ν•œλ‹€.

​

μœ„μ˜ νœ΄λ©΄κ³„μ • ν…Œμ΄λΈ”μ€ 아직 delete문을 μ‹€ν–‰ν•˜κΈ° 전이며,

DELETE FROM ν™˜μž where ν™˜μž.처치일 < ADD_MONTHS(SYSDATE, -36)을 μ‹€ν–‰ν•˜λ©΄,

처치일이이 3년이상 κ°±μ‹ λ˜μ§€ μ•Šμ€ ν™˜μžλ₯Ό νœ΄λ©΄κ³„μ •μœΌλ‘œ μ „ν™˜ν•˜λŠ” νŠΈλ¦¬κ±°μ΄λ‹€.

​

create sequence 휴면seq;λ₯Ό μ‹€ν–‰ν•˜μ—¬ 미리 휴면 κ³„μ •μ˜ μ‹œν€€μŠ€λ₯Ό λ§Œλ“€μ–΄λ‘”λ‹€.

2023.01.02 - [ν”„λ‘œμ νŠΈ/DB] - [DB] 병원 관리 ν”„λ‘œκ·Έλž¨ (1)

 

[DB] 병원 관리 ν”„λ‘œκ·Έλž¨ (1)

2021.05.11.-2021.06.08. ​ Oracle DBMSλ₯Ό μ‚¬μš©ν•œ 병원 λ°μ΄ν„°λ² μ΄μŠ€μ΄λ‹€. ​ 이λ₯Ό 톡해 병원에 μžˆλŠ” λͺ¨λ“  μ˜μ‚¬λ“€ 및 κ°„ν˜Έμ‚¬λ“€μ˜ 데이터λ₯Ό 확인할 수 있으며, λ‹΄λ‹Ήν•˜λŠ” μ§„λ£Œκ³Όλ₯Ό 확인할 수 μžˆλ‹€. ​ λ˜ν•œ,

dangsdangs.tistory.com

 

'ν”„λ‘œμ νŠΈ > DB' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[DB] 병원 관리 ν”„λ‘œκ·Έλž¨ (1)  (1) 2023.01.02