본문 바로가기

# 미사용

오라클 DB에 연결하기

oracledb 외부모듈

노드에서 오라클 데이터베이스를 사용하려면

oracledb 외부모듈을 설치해야 한다.

   npm install oracledb

oracle 연결

let oracledb = require('oracledb');

oracledb.getConnection(
{
user : "C##AEROLABS",
password : "yourPassowrd",
connectString : "localhost/oracle"
},
(err, conn)=>
{
//! 연결 시도 후, 콜백함수 호출.
});

connectString의 뒤에 따라오는 데이터베이스 이름은 아래 쿼리로 알아낸다.

SELECT NAME, DB_UNIQUE_NAME FROM v$database;

데이터 조회

커넥션이 성공적으로 만들어지면 conn 객체를 사용하여 통신할 수 있다.

let oracledb = require('oracledb');

oracledb.getConnection(
{
user : "C##AEROLABS",
password : "yourPassowrd",
connectString : "localhost/oracle"
},
(err, conn)=>
{
if(err)
{
console.error(err.message);
doRelease(conn);
return;
}
//! 바인드 변수를 활용한 SELECT 문장.
conn.execute("SELECT * FROM MSG WHERE IDX=:IDX", [1], (err, result)=>
{
if(err)
{
console.error(err.message);
doRelease(conn);
return;
}
console.log(result);
doRelease(conn);
})
});

let doRelease = (conn)=>
{
conn.close((err)=>
{
if(err) console.log(err.message);
})
};

결과는 다음과 같다.

{   outBinds: undefined,
rowsAffected: undefined,
metaData: [ { name: 'IDX' }, { name: 'CONTENTS' } ],
rows: [ [ 1, 'x' ] ] }

Process finished with exit code 0

FetchSize는 oracledb.fetchArraySize를 통해 조절가능하다.

기본값은 100이다.

oracledb.fetchArraySize = 100;

기타 자세한 사항은 oracledb문서를 참조하기 바란다.

데이터 삽입/삭제/갱신

conn.execute() 안에 DML 문장을 넣으면 데이터 갱신이 가능하다.

응답값의 rowsAffected 멤버에는 갱신/추가/제거된 레코드의 개수가 저장된다.


단, commit()rollback()을 명시적으로 실행해야 결과가 적용된다.

귀찮다면 autoCommit을 true로 바꾸자. (기본값은 false이다.)

//! 명시적 커밋, 롤백
conn.commit ((err)=>{ });
conn.rollback((err)=>{ });

//! 암묵적 커밋
oracledb.autoCommit = true;

JSON 데이터 타입

12c부터 오라클은 JSON 자료형을 지원하기 시작했다.

JSON 객체를 저장할 수 있는 자료형은 다음과 같다.

  • BLOB
  • CLOB
  • VARCHAR2

CREATE TABLE po (po_document VARCHAR2(4000) CHECK (po_document IS JSON));

이제 노드에서 아래와 같이 데이터를 저장할 수 있다.

let data = { customerId: 100, item: 1234, quantity: 2 };
let s = JSON.stringify(data); // change JavaScript value to a JSON string

conn.execute(
"INSERT INTO po (po_document) VALUES (:bv)",
[s] // bind the JSON string
function (err) {
. . .
});

JSON 조건절

  • 해당 칼럼이 JSON 객체인지 검사
1
2
3
SELECT t_document
  FROM t
  WHERE t_document IS JSON [strict];
cs
  • JSON 객체의 n번째 속성의 이름(KEY값)이 givenName인지 검사
1
2
3
SELECT t_document 
  FROM t
  WHERE JSON_EXISTS(t_document, '$[n].givenName');
cs
  • JSON 객체에 givenName 속성이 있는지 검사
1
2
3
SELECT t_document 
  FROM t
  WHERE JSON_EXISTS(t_document, '$.givenName');
cs
  • givenName 속성값이 givenValue인 JSON 객체 찾기
1
2
3
4
5
6
7
8
9
-- 먼저 인덱스를 생성해야 한다.
CREATE INDEX ix
  ON po(po_document)
  INDEXTYPE IS CTXSYS.CONTEXT
  PARAMETERS ('SECTION GROUP CTXSYS.JSON_SECTION_GROUP SYNC (ON COMMIT)');
 
SELECT po_document
   FROM po
   WHERE JSON_TEXTCONTAINS(po_document, '$.givenName''givenValue');
cs


'# 미사용' 카테고리의 다른 글

[1-1-1]: 전사 아키텍쳐(EA)  (0) 2018.03.10
Google Datastore에 연결하기  (0) 2018.03.01
Ajax 요청 처리하기  (0) 2018.02.26
파일 업로드하기  (0) 2018.02.26
쿠키 세션 다루기  (0) 2018.02.25