Skip to content

Commit af60fa2

Browse files
committed
Test DB Objects with DML RETURNING INTO
1 parent 82a8331 commit af60fa2

File tree

2 files changed

+133
-1
lines changed

2 files changed

+133
-1
lines changed

test/dbObject9.js

Lines changed: 129 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ describe('208. dbObject9.js', () => {
7777
bindArr,
7878
opts
7979
);
80-
//console.log(result);
80+
8181
should.strictEqual(result.rowsAffected, PEOPLE.length);
8282

8383
} catch (err) {
@@ -170,4 +170,132 @@ describe('208. dbObject9.js', () => {
170170
}
171171
}); // 208.3
172172

173+
it('208.4 DML RETURNING INTO, explicit bind type', async () => {
174+
175+
try {
176+
const PersonType = await conn.getDbObjectClass(TYPE);
177+
178+
const staff = { ID: 1123, NAME: 'Changjie', GENDER: 'Male' };
179+
const staffNo = 23;
180+
const p = new PersonType(staff);
181+
let sql = `INSERT INTO ${TABLE} VALUES (:1, :2) RETURNING empnum, person INTO :3, :4`;
182+
let bindVar = [
183+
staffNo,
184+
{ type: PersonType, val: p },
185+
{ dir: oracledb.BIND_OUT, type: oracledb.DB_TYPE_NUMBER },
186+
{ dir: oracledb.BIND_OUT, type: PersonType }
187+
];
188+
let result = await conn.execute(sql, bindVar);
189+
190+
should.strictEqual(result.rowsAffected, 1);
191+
should.strictEqual(result.outBinds[0][0], staffNo);
192+
should.deepEqual(
193+
result.outBinds[1][0]._toPojo(),
194+
staff
195+
);
196+
} catch (err) {
197+
should.not.exist(err);
198+
}
199+
}); // 208.4
200+
201+
it('208.5 DML RETURNING INTO, implicit bind type', async () => {
202+
try {
203+
const PersonType = await conn.getDbObjectClass(TYPE);
204+
205+
const staff = { ID: 23456, NAME: 'Chris', GENDER: 'Male' };
206+
const staffNo = 101;
207+
const p = new PersonType(staff);
208+
let sql = `INSERT INTO ${TABLE} VALUES (:1, :2) RETURNING empnum, person INTO :3, :4`;
209+
let bindVar = [
210+
staffNo,
211+
p,
212+
{ dir: oracledb.BIND_OUT, type: oracledb.DB_TYPE_NUMBER },
213+
{ dir: oracledb.BIND_OUT, type: PersonType }
214+
];
215+
let result = await conn.execute(sql, bindVar);
216+
217+
should.strictEqual(result.rowsAffected, 1);
218+
should.strictEqual(result.outBinds[0][0], staffNo);
219+
should.deepEqual(
220+
result.outBinds[1][0]._toPojo(),
221+
staff
222+
);
223+
} catch (err) {
224+
should.not.exist(err);
225+
}
226+
}); // 208.5
227+
228+
it('208.6 DML RETURNING INTO, bind by named values', async () => {
229+
try {
230+
const PersonType = await conn.getDbObjectClass(TYPE);
231+
232+
const staff = { ID: 789, NAME: 'Shelly', GENDER: 'Female' };
233+
const staffNo = 102;
234+
const p = new PersonType(staff);
235+
let sql = `INSERT INTO ${TABLE} VALUES (:n, :i) RETURNING empnum, person INTO :o1, :o2`;
236+
let bindVar = {
237+
n: staffNo,
238+
i: p,
239+
o1: { dir: oracledb.BIND_OUT, type: oracledb.DB_TYPE_NUMBER },
240+
o2: { dir: oracledb.BIND_OUT, type: PersonType }
241+
};
242+
let result = await conn.execute(sql, bindVar);
243+
244+
should.strictEqual(result.rowsAffected, 1);
245+
should.strictEqual(result.outBinds.o1[0], staffNo);
246+
should.deepEqual(
247+
result.outBinds.o2[0]._toPojo(),
248+
staff
249+
);
250+
} catch (err) {
251+
should.not.exist(err);
252+
}
253+
}); // 208.6
254+
255+
it.skip('208.7 DML RETURNING INTO and executeMany()', async () => {
256+
try {
257+
const PersonType = await conn.getDbObjectClass(TYPE);
258+
259+
const staffs = [
260+
{ ID: 7001, NAME: 'Emma', GENDER: 'Female' },
261+
{ ID: 7002, NAME: 'Ashley', GENDER: 'Female' },
262+
{ ID: 7003, NAME: 'Alexanda', GENDER: 'Male' },
263+
];
264+
const staffNo = [201, 202, 203];
265+
266+
let bindArr = [];
267+
for (let i = 0, num, p; i < staffs.length; i++) {
268+
num = staffNo[i];
269+
p = new PersonType(staffs[i]);
270+
bindArr[i] = [num, p];
271+
}
272+
let opts = {
273+
autoCommit: true,
274+
bindDefs: [
275+
{ type: oracledb.NUMBER },
276+
{ type: PersonType },
277+
{ dir: oracledb.BIND_OUT, type: oracledb.DB_TYPE_NUMBER },
278+
{ dir: oracledb.BIND_OUT, type: PersonType }
279+
]
280+
};
281+
let result = await conn.executeMany(
282+
`INSERT INTO ${TABLE} VALUES (:1, :2) RETURNING empnum, person INTO :3, :4`,
283+
bindArr,
284+
opts
285+
);
286+
console.log("==== Result of RETURNING INTO ========");
287+
for (let i = 0; i < staffs.length; i++) {
288+
console.log(result.outBinds[i]);
289+
}
290+
console.log();
291+
292+
console.log("==== Result in table ========");
293+
let res = await conn.execute(`SELECT * FROM ${TABLE} WHERE empnum > 200 AND empnum < 205`);
294+
console.log(res);
295+
296+
} catch (err) {
297+
should.not.exist(err);
298+
}
299+
}); // 208.7
300+
173301
});

test/list.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4551,6 +4551,10 @@ oracledb.OUT_FORMAT_OBJECT and resultSet = true
45514551
208.1 REF cursors that fetch object
45524552
208.2 Implicit results that fetch objects
45534553
208.3 Implicit results that fetch objects with Result Set
4554+
208.4 DML RETURNING INTO, explicit bind type
4555+
208.5 DML RETURNING INTO, implicit bind type
4556+
208.6 DML RETURNING INTO, bind by named values
4557+
208.7 DML RETURNING INTO and executeMany()
45544558

45554559
209. dbObject10.js
45564560
209.1 DB Objects which contain PL/SQL methods

0 commit comments

Comments
 (0)