@@ -77,7 +77,7 @@ describe('208. dbObject9.js', () => {
77
77
bindArr ,
78
78
opts
79
79
) ;
80
- //console.log(result);
80
+
81
81
should . strictEqual ( result . rowsAffected , PEOPLE . length ) ;
82
82
83
83
} catch ( err ) {
@@ -170,4 +170,132 @@ describe('208. dbObject9.js', () => {
170
170
}
171
171
} ) ; // 208.3
172
172
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
+
173
301
} ) ;
0 commit comments