Chapter 17. Oracle 연결

IT 지식 / Python·2026.08.26
ORACLE DATABASE
Chapter 17. Oracle 연결
Oracle Database와 파이썬의 연동 방법에 대해 알아봅니다.

17.1 Oracle Database란?

Oracle Database는 기업에서 가장 많이 사용하는 상용 관계형 데이터베이스 관리 시스템(RDBMS)입니다. 금융, 공공기관, 대기업, 대학, 병원 등 대규모 데이터를 처리하는 시스템에서 널리 사용됩니다. 파이썬에서는 oracledb 라이브러리를 이용하여 Oracle Database와 연동할 수 있습니다.

Oracle의 특징
  • 대용량 데이터 처리에 적합하다.
  • 높은 안정성과 보안성을 제공한다.
  • 트랜잭션(Transaction) 처리 성능이 우수하다.
  • 기업 및 공공기관에서 많이 사용된다.
  • SQL과 PL/SQL을 지원한다.
Oracle 활용 분야
  • 은행 시스템
  • 공공기관 업무 시스템
  • 대학 학사관리
  • 병원 관리 시스템
  • ERP
  • 그룹웨어
Oracle과 MySQL 비교
Oracle MySQL
상용 DB 오픈소스 DB
대기업·공공기관 웹 서비스
대용량 데이터 중·소규모 서비스
고성능·고가용성 설치와 관리가 간편
17.2 Oracle 설치

Oracle Database는 공식 홈페이지에서 다운로드하여 설치할 수 있습니다. 학습용으로는 Oracle Database Express Edition(XE)을 많이 사용합니다.

설치 과정
  • Oracle Database XE 설치
  • Listener 설치
  • 데이터베이스 생성
  • 관리자 계정 설정
SQL 명령어
sqlplus
system
비번
sqlplus / as sysdba
show user
conn system/1234
create user hong identified by 1234;
grant connect, resource to hong;
conn hong/1234
SELECT table_name FROM user_tables WHERE table_name = '테이블명';
desc 테이블명;    
commit;
exit;
        
기본 접속 정보
  • Host: localhost
  • Port: 1521
  • Service Name: XE 또는 FREEPDB1
  • User: system 또는 사용자 계정
  • Password: 설치 시 설정한 비밀번호

Oracle Database 23ai Free에서는 서비스 이름으로 FREEPDB1을 사용하는 경우가 많으며, Oracle XE에서는 XE를 사용하는 경우가 많습니다.

Oracle 접속 확인

예를 들어 SQL Developer에서 다음과 같이 접속합니다.

  • Host: localhost
  • Port: 1521
  • Service Name: XE
  • User: system
  • Password: ****

접속이 성공하면 SQL을 실행할 수 있습니다.

17.3 oracledb 라이브러리

파이썬에서 Oracle Database를 사용하려면 oracledb 라이브러리를 설치해야 합니다.

설치
명령 프롬프트(CMD)
pip install oracledb
설치 확인
설치 확인
pip show oracledb
라이브러리 가져오기
Python 코드
import oracledb
Oracle 연결
Python 코드
import oracledb

conn = oracledb.connect(
    user="system",
    password="1234",
    host="localhost",
    port=1521,
    service_name="XE"
)

print("Oracle 연결 성공")
conn.close()
        
실행 결과
Oracle 연결 성공
Cursor 생성

Cursor는 SQL 문장을 실행하는 객체입니다.

Python 코드
cursor = conn.cursor()
SQL 실행
Python 코드
cursor.execute("SELECT * FROM member")
17.4 Oracle 테이블 생성
회원 테이블 생성
SQL 명령어
drop table member;
create table member(
     member_id number generated by default as identity primary key,
     name varchar2(50),
     age number
);
        

Oracle에서는 다음과 같은 자료형을 가장 많이 사용합니다.

Oracle 자료형
자료형 설명
NUMBER 숫자
VARCHAR2 문자열
DATE 날짜
TIMESTAMP 날짜와 시간
CLOB 긴 문자열
17.5 CRUD

CRUD는 데이터베이스에서 가장 많이 사용하는 기능입니다.

기능과 SQL
  • Create: INSERT
  • Read: SELECT
  • Update: UPDATE
  • Delete: DELETE
CREATE (INSERT)

콘솔로 입력받아서 삽입하는 프로그램

oracleinsert.py
import oracledb

c password='oracle', host='localhost', 
port=1521, service_name='xe') # 11버전

name = input("이름을 입력하세요: ")
age = int(input("나이를 입력하세요: "))

cursor = conn.cursor()
cursor.execute("insert into member (name, age) values (:1, :2)", (name, age))

conn.commit()
cursor.close()
conn.close()
print("오라클과 연결이 종료되었습니다.")
        
READ (SELECT)

member 테이블의 모든 레코드를 조회하는 프로그램

oracleselect.py
import oracledb

c password='oracle', 
    host='localhost', port=1521, service_name='xe') # 11버전

cursor = conn.cursor()
age = int(input("나이를 입력하세요: "))
cursor.execute("select * from member where age >= :1", (age,))
rows = cursor.fetchall()

for row in rows:
    print(row[0], row[1], row[2])

cursor.close()
conn.close()
print("오라클과 연결이 종료되었습니다.")
        
UPDATE

member 테이블의 레코드를 수정하는 프로그램

oracleupdate.py
import oracledb

c password='oracle', 
    host='localhost', port=1521, service_name='xe') # 11버전
cursor = conn.cursor()

id = int(input("id를 입력하세요: "))
name = input("name을 입력하세요: ")
age = int(input("age를 입력하세요: "))

cursor.execute("update member set name = :1, age = :2 where member_id = :3",
    (name, age, id))
conn.commit()
cursor.close()
conn.close()
print("오라클과 연결이 종료되었습니다.")
        
DELETE

member 테이블의 레코드를 삭제하는 프로그램

oracledelete.py
import oracledb

c password='oracle', 
    host='localhost', port=1521, service_name='xe') # 11버전
cursor = conn.cursor()
id = int(input("id를 입력하세요: "))
cursor.execute("delete from member where member_id = :1", (id,))
conn.commit()
cursor.close()
conn.close()
print("오라클과 연결이 종료되었습니다.")
        
17.6 Sequence 방식과 IDENTITY 방식
1. 시퀀스(Sequence) 방식

Oracle에서는 자동 증가 번호를 위해 시퀀스를 많이 사용합니다.

시퀀스 생성
SQL 명령어
CREATE SEQUENCE seq_member
START WITH 1
INCREMENT BY 1;
        
데이터삽입 할때 사용
SQL 명령어
INSERT INTO member(member_id, name, age)
VALUES(
    seq_member.NEXTVAL,
    '홍길동',
    20
);
        
2. IDENTITY 방식 – 12c버전 이후
테이블 생성할때 필드명 뒤에 정의함
SQL 명령어
CREATE TABLE member(
    member_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    name VARCHAR2(50),
    age NUMBER
);
        
데이터삽입 할때 사용
SQL 명령어
INSERT INTO member(name, age)              # 자동으로 번호가 증가합니다.
VALUES ('홍길동', 20);
INSERT INTO member(member_id, name, age)  # 직접 번호를 넣을 수도 있다
VALUES (100, '이영희', 30);
        

시퀀스(Sequence) 방식과 IDENTITY 방식 비교

구분 SEQUENCE(11g, 12c이상) IDENTITY(12c이상)
생성 방식 별도 객체명을 create 테이블에 포함
번호 생성 객체명.nextval 자동
INSERT nextval 사용 ID 생략 가능
여러 테이블 사용 가능 불가능(1개의 테이블에만 가능)
관리 유연함 간단
17.7 Oracle 날짜 처리

현재 날짜를 저장할 때는 SYSDATE를 사용합니다.

boarddate.py
import oracledb

conn = oracledb.connect(
 password='oracle', host='localhost', port=1521, service_name='xe') # 11버전

title = input("제목을 입력하세요: ")

cursor = conn.cursor()
cursor.execute("""insert into board 
  (board_id, title, created_at) 
  values(board_seq.nextval, :1, SYSDATE)""", 
  (title,))
  
conn.commit()
cursor.close()
conn.close()
print("오라클과 연결이 종료되었습니다.")
        
17.8 MySQL과 Oracle 비교
MySQL Oracle
%s 바인드 변수 :1, :2 바인드 변수
AUTO_INCREMENT SEQUENCE
INT NUMBER
VARCHAR VARCHAR2
NOW() SYSDATE
a computer screen with a bunch of code on it
📌 Chapter 17 핵심 정리
  • Oracle Database는 대규모 데이터를 처리하는 상용 RDBMS이다.
  • oracledb 라이브러리를 통해 파이썬과 연동할 수 있다.
  • Oracle 설치 후 기본 접속 정보를 통해 SQL Developer에서 접속할 수 있다.
  • CRUD 기능을 통해 데이터베이스의 데이터를 관리할 수 있다.
  • 시퀀스 방식과 IDENTITY 방식으로 자동 증가 번호를 생성할 수 있다.
  • SYSDATE를 사용하여 현재 날짜를 저장할 수 있다.

프로그램·홈페이지·강의가 필요하신가요?

프로그램 판매, 무료 다운로드, 홈페이지 제작, IT 강의 상담을 도와드립니다.

상담 신청하기