Node 에서 Oracle DB 사용하기

2023. 4. 25. 10:54프로그래밍

1. Oracle Instant Client 설치

아래의 사이트를 방문해서 OS에 맞는 프로그램을 다운로드 받고 설치하시면 됩니다.

https://www.oracle.com/kr/database/technologies/instant-client/downloads.html

 

Oracle Instant Client Downloads | Oracle 대한민국

죄송합니다. 검색 내용과 일치하는 항목을 찾지 못했습니다. 원하시는 정보를 찾는 데 도움이 되도록 다음을 시도해 보십시오. 검색에 사용하신 키워드의 철자가 올바른지 확인하십시오. 입력

www.oracle.com

 

 

2. oracledb 설치

npm install oracledb

 

 

3. db 정보 파일 생성

db에 대한 정보를 포함하는 파일을 별도로 만들어줍니다.

/db/dbconfig.js

module.exports = {
    user          : "abc",
    password      : "abc",
    connectString : "1.1.1.1:1521/EX",
    externalAuth  : false
};

 

 

4. oracle instant client 연결

/src/init.js

import * as os from 'os';
import oracledb from 'oracledb';

function init_oracle() {
    console.log(os.platform() + " / " + os.platform().toLowerCase().indexOf("win"));
    
    //oracle client 경로 설정
    let flag_run_on_windows = (os.platform().toLowerCase().indexOf("win") >= 0);
    if( flag_run_on_windows )
    {
        // Windows
        oracledb.initOracleClient({ libDir: 'C:\\dev\\instantclient_21_9' });
    }
    else
    {
        // Docker(Linux)
        oracledb.initOracleClient({ libDir: '/usr/lib/oracle/18.5/client64/lib' });
    }
}

 

5. db 접근 코드 작성

/src/order.js

import * as dbconfig from "../db/dbconfig.js";
import oracledb from 'oracledb';

async function query_execute(query, flag_commit = false) {
    console.log("  - query: " + query);
    
    let connection = await oracledb.getConnection(dbConfig);
    let binds = {};
    let options = {
        outFormat: oracledb.OUT_FORMAT_OBJECT   // query result format
    };

    let result = await connection.execute(query, binds, options);

    // 커밋
    if( flag_commit )
    {
        let query_commit = "COMMIT";
        await connection.execute(query_commit, binds, options);
    }

    await connection.close();

    if (result === undefined ||
        result.rows === undefined ||
        result.rows.length === undefined ||
        result.rows.length === 0) {
        return undefined;
    }

    return result;
}

async function get_order_json() {
    let query = 
        " SELECT name, TO_CHAR(order_date, 'yyyy-mm-dd / hh24:MM:ss') AS dt " +
           " FROM tbl_order " +
           " WHERE TRUNC(order_date) >= '2023-01-01' " +
           " ORDER BY order_date ";
    
    let result = await query_execute(query);
    if (result === undefined) { return undefined; }
    
    let str_json_result = '[';
    for (let i = 0; i < result.rows.length; i++) 
    {
        if (i > 0) { str_json_result += ','; }

        str_json_result +=
            '{"name":"'  + result.rows[i].NAME + '",' +
            '"date":"'   + result.rows[i].DT + '"}';
    }
    str_json_result += ']';
    
    console.log("  - str_json_result: " + str_json_result);

    return JSON.parse(str_json_result);
}

 

 

사업자 정보 표시
주식회사 셀엑손 (CELLAXON Inc. | 이상효 | 경기도 화성시 동탄감배산로 143, 202동 2409호 | 사업자 등록번호 : 304-81-34245 | TEL : 031-8043-3215 | Mail : ryan@cellaxon.com | 통신판매신고번호 : 2022-화성동탄-0844호 | 사이버몰의 이용약관 바로가기