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 |