투케이2K

110. (NodeJs) [Mac Os] [Oracle] : oracledb 모듈 사용해 오라클 Procedure 프로시저 및 OUT 메시지 , 커서 데이터 확인 본문

NodeJs

110. (NodeJs) [Mac Os] [Oracle] : oracledb 모듈 사용해 오라클 Procedure 프로시저 및 OUT 메시지 , 커서 데이터 확인

투케이2K 2024. 1. 23. 20:49

[개발 환경 설정]

개발 툴 : VS CODE

개발 언어 :NodeJs

 

[오라클 프로시저 생성 소스 코드 참고]

/************************************************************/
CREATE OR REPLACE PROCEDURE TEST_USER_PROCEDURE
(
  I_DEPT        IN VARCHAR, -- [인풋 : 부서]

  O_MSG         OUT VARCHAR -- [리턴 : 메시지]                                                                                             
  O_CURSOR      OUT SYS_REFCURSOR -- [리턴 : 커서]
)
                                               
/*************************************************************
 
 

[사전) NodeJS 프로젝트 설정 방법]

 

[app.js : 소스 코드]

 

// ----------------------------------------------------------------------------------------------

// ---------------------------------------
// [모듈 추가]
// ---------------------------------------
const express = require('express')
const app = express()



// ---------------------------------------
// [모듈 추가]
// ---------------------------------------
app.set('view engine', 'ejs') // [Page] : [Render]
app.set('views', './views') // [Page] : [Render]



// ---------------------------------------
// [모듈 추가]
// ---------------------------------------
var bodyParser = require('body-parser'); // [body-parser 사용]

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());



// ---------------------------------------
// [모듈 추가]
// ---------------------------------------
var nocache = require('nocache'); // [nocache 사용]
app.use(nocache());



// ---------------------------------------
// [모듈 추가]
// ---------------------------------------
const oracledb = require('oracledb');
oracledb.autoCommit = true; // [오토 커밋 설정]
oracledb.outFormat = oracledb.OUT_FORMAT_OBJECT;

const config = { // [DB 접속 정보]
    user: "ADMIN",
    password: "admin#5678",
    connectString: "105.78.166.205:1521/ORADB"
};

// ----------------------------------------------------------------------------------------------

// [Get] : Path = [/testDB] : http://localhost:3000/testDB
app.get('/testDB', async (req,res) => {
    console.log("")
    console.log("==============================================================================")
    console.log("[Server] :: [App] :: [Path = /testDB] :: [Start]")
    console.log("==============================================================================")
    console.log("")

    var resData = ""
    let connection
    try {
        connection = await oracledb.getConnection(config)

        // [쿼리 정의]
        let query = "BEGIN TEST_USER_PROCEDURE(:I_DEPT, :O_MSG, :O_CURSOR); END;"

        const results = await connection.execute(
            query, 
            {
                I_DEPT: "백제",
                O_MSG: { type: oracledb.STRING, dir: oracledb.BIND_OUT },
                O_CURSOR: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
            },
            {
                prefetchRows:   1000, // getRow() data fetch
                fetchArraySize: 1000
            }
        );


        console.log(results); // [로그 출력]

        const resultMsg = results.outBinds.O_MSG;
        const resultSet = results.outBinds.O_CURSOR;
        let row;
        var arr = new Array();
        while ((row = await resultSet.getRow())) {
            arr.push(row); // [배열에 삽입]
        }

        await resultSet.close();   // [always close the ResultSet]

        // [변수에 삽입]
        resData = {MSG: resultMsg, CURSOR: arr};

    } catch (error) {
        resData = error.message // [리턴 변수에 삽입]
    } finally {
        if (connection) { // [연결 종료]
            try {
                await connection.close()
            } catch (error) {}
        }

        res.status(200).send({"result" : resData}); // [http 반환]
    }

});

// ----------------------------------------------------------------------------------------------

// [Server] : [Start]
//*
app.listen(3000, function () {
    console.log("")
    console.log("==============================================================================")
    console.log("[Server] :: [Port = 3000] :: [Start]")
    console.log("==============================================================================")
    console.log("")
})
// */

// ----------------------------------------------------------------------------------------------
 

[결과 출력]

 

 

반응형
Comments