Fix binding NULL to PL/SQL parameters

This commit is contained in:
Christopher Jones 2017-04-12 11:13:40 +10:00
parent 7c1a54e535
commit 053f88c5c9
19 changed files with 8333 additions and 233 deletions

View File

@ -75,9 +75,6 @@ Nan::Persistent<FunctionTemplate> Connection::connectionTemplate_s;
#define NJS_ITER_SIZE 65535 /* Use (64KB - 1) with 11g Clients */
#endif
// Max number of bytes allowed for PLSQL STRING/BUFFER arguments
#define NJS_THRESHOLD_SIZE_PLSQL_STRING_ARG 32767
// number of rows prefetched by non-ResultSet queries
#define NJS_PREFETCH_NON_RESULTSET 2
@ -1088,6 +1085,7 @@ void Connection::GetInBindParamsScalar(Local<Value> v8val, Bind* bind,
{
case NJS_VALUETYPE_NULL:
bind->value = NULL;
*(bind->len) = 0; /* NULL value provided, no buffer used */
bind->type = dpi::DpiVarChar;
break;
@ -2403,41 +2401,17 @@ void Connection::Descr2StringOrBuffer ( eBaton* executeBaton )
* index - Index of the Bind vector
*
* NOTE:
* Bind enhancements for CLOB/BLOB As String/Buffer not supported for INOUT
* arguments
* Bind type is expected only STRING and RAW
*
*/
void Connection::ConvertStringOrBuffer2LOB ( eBaton* executeBaton,
unsigned int index )
{
Bind *bind = executeBaton->binds[index];
DPI_SZ_TYPE size = 0;
if ( !bind->isOut && !bind->isInOut )
ExtBind* extBind = new ExtBind ( NJS_EXTBIND_LOB );
if ( extBind )
{
// Case for BIND_IN
size = *bind->len;
}
else if ( bind->isInOut )
{
// Case for BIND_INOUT
size = ( bind->maxSize >= *( bind->len ) ) ? bind->maxSize : *( bind->len );
}
else if ( bind->isOut && !bind->isInOut )
{
// Case for BIND_OUT
size = bind->maxSize;
}
if ( size > NJS_THRESHOLD_SIZE_PLSQL_STRING_ARG )
{
ExtBind* extBind = new ExtBind ( NJS_EXTBIND_LOB );
if ( !extBind )
{
executeBaton->error = NJSMessages::getErrorMsg
( errInsufficientMemory );
goto exitConvertStringOrBuffer2LOB;
}
extBind->fields.extLob.maxSize = bind->maxSize;
// Convert the input data into Temp LOB for IN and INOUT binds
@ -2462,9 +2436,13 @@ void Connection::ConvertStringOrBuffer2LOB ( eBaton* executeBaton,
// Change the bind->type to LOB to handle more than 32k data
bind->type = ( bind->type == DpiVarChar ) ? DpiClob : DpiBlob;
}
else
{
executeBaton->error = NJSMessages::getErrorMsg
( errInsufficientMemory );
}
exitConvertStringOrBuffer2LOB:
;
}
@ -2517,98 +2495,104 @@ void Connection::PrepareLOBsForBind ( eBaton* executeBaton, unsigned int index )
*/
void Connection::PrepareAndBind (eBaton* executeBaton)
{
executeBaton->dpistmt = executeBaton->dpiconn->getStmt(executeBaton->sql);
executeBaton->st = executeBaton->dpistmt->stmtType ();
executeBaton->dpistmt = executeBaton->dpiconn->
getStmt(executeBaton->sql);
executeBaton->st = executeBaton->dpistmt->stmtType ();
executeBaton->stmtIsReturning = executeBaton->dpistmt->isReturning ();
ExtBind *extBind = NULL ;
ExtBind *extBind = NULL ;
if(!executeBaton->binds.empty())
{
if(!executeBaton->binds[0]->key.empty())
for(unsigned int index = 0 ;index < executeBaton->binds.size();
index++)
{
for(unsigned int index = 0 ;index < executeBaton->binds.size();
index++)
if ( executeBaton->binds[index]->isOut &&
executeBaton->stmtIsReturning &&
executeBaton->binds[index]->type == dpi::DpiRSet )
{
if ( executeBaton->binds[index]->isOut &&
executeBaton->stmtIsReturning &&
executeBaton->binds[index]->type == dpi::DpiRSet )
{
executeBaton->error = NJSMessages::getErrorMsg (
errInvalidResultSet ) ;
goto exitPrepareAndBind;
}
executeBaton->error = NJSMessages::getErrorMsg (
errInvalidResultSet ) ;
goto exitPrepareAndBind;
}
// Process bind enhancements CLOB/BLOB As String/Buffer for PL/SQL
if ( ( executeBaton->st == DpiStmtBegin ||
executeBaton->st == DpiStmtDeclare ||
executeBaton->st == DpiStmtCall ) &&
( executeBaton->binds[index]->type == DpiVarChar ||
executeBaton->binds[index]->type == DpiRaw ) )
// Process bind enhancements CLOB/BLOB As String/Buffer for PL/SQL
/* Interested only in PL/SQL procedure calls */
if ( ( executeBaton->st == DpiStmtBegin ||
executeBaton->st == DpiStmtDeclare ||
executeBaton->st == DpiStmtCall ))
{
/* Interested only in STRING or RAW data type */
if ( executeBaton->binds[index]->type == DpiVarChar ||
executeBaton->binds[index]->type == DpiRaw )
{
ConvertStringOrBuffer2LOB ( executeBaton, index );
if ( IsValue2TempLob ( executeBaton, index ) )
{
ConvertStringOrBuffer2LOB ( executeBaton, index ) ;
}
}
}
// process LOB object for IN and INOUT bind
if ( ( executeBaton->binds[index]->isInOut ||
!executeBaton->binds[index]->isOut ) &&
( *(executeBaton->binds[index]->ind) != -1 ) &&
( executeBaton->binds[index]->type == DpiClob ||
executeBaton->binds[index]->type == DpiBlob ) )
{
PrepareLOBsForBind ( executeBaton, index );
}
// Allocate for OUT Binds
// For DML Returning, allocation happens through callback.
// binds->value is a pointer to a pointer in case of LOBs
if ( executeBaton->binds[index]->isOut &&
!executeBaton->stmtIsReturning &&
!executeBaton->binds[index]->value )
{
Connection::cbDynBufferAllocate ( executeBaton, false, 1, index );
if ( !executeBaton->error.empty() )
{
goto exitPrepareAndBind;
}
}
// process LOB object for IN and INOUT bind
if ( ( executeBaton->binds[index]->isInOut ||
!executeBaton->binds[index]->isOut ) &&
( *(executeBaton->binds[index]->ind) != -1 ) &&
( executeBaton->binds[index]->type == DpiClob ||
executeBaton->binds[index]->type == DpiBlob ) )
// Convert v8::Date to Oracle DB Type for IN and IN/OUT binds
if ( executeBaton->binds[index]->type == DpiTimestampLTZ &&
( executeBaton->binds[index]->isInOut || // INOUT binds
!executeBaton->binds[index]->isOut ) ) // NOT OUT && NOT INOUT
{
Connection::UpdateDateValue ( executeBaton,
executeBaton->binds[index], 1 ) ;
}
if ( executeBaton->stmtIsReturning && executeBaton->binds[index]->isOut )
{
extBind = new ExtBind ( NJS_EXTBIND_DMLRETCB ) ;
DpiBindCallbackCtx *ctx = extBind->fields.extDMLReturnCbCtx.ctx =
(DpiBindCallbackCtx *) malloc ( sizeof ( DpiBindCallbackCtx ) );
if ( !ctx )
{
PrepareLOBsForBind ( executeBaton, index );
}
// Allocate for OUT Binds
// For DML Returning, allocation happens through callback.
// binds->value is a pointer to a pointer in case of LOBs
if ( executeBaton->binds[index]->isOut &&
!executeBaton->stmtIsReturning &&
!executeBaton->binds[index]->value )
{
Connection::cbDynBufferAllocate ( executeBaton,
false, 1, index );
}
// Convert v8::Date to Oracle DB Type for IN and IN/OUT binds
if ( executeBaton->binds[index]->type == DpiTimestampLTZ &&
( executeBaton->binds[index]->isInOut || // INOUT binds
!executeBaton->binds[index]->isOut ) ) // NOT OUT && NOT INOUT
{
Connection::UpdateDateValue ( executeBaton,
executeBaton->binds[index], 1 ) ;
}
if ( executeBaton->stmtIsReturning &&
executeBaton->binds[index]->isOut )
{
extBind = new ExtBind ( NJS_EXTBIND_DMLRETCB ) ;
DpiBindCallbackCtx *ctx = extBind->fields.extDMLReturnCbCtx.ctx =
(DpiBindCallbackCtx *) malloc ( sizeof ( DpiBindCallbackCtx ) );
if ( !ctx )
{
executeBaton->error = NJSMessages::getErrorMsg (
executeBaton->error = NJSMessages::getErrorMsg (
errInsufficientMemory );
goto exitPrepareAndBind;
}
ctx->callbackfn = Connection::cbDynBufferGet;
/* App specific callback */
ctx->data = (void *)executeBaton;
/* Data for App specific callback */
ctx->bndpos = index; /* for callback, bind position zero based */
ctx->nrows = 0; /* # of rows - will be filled in later */
ctx->iter = 0; /* # iteration - will be filled in later */
ctx->dpistmt = executeBaton->dpistmt; /* DPI Statement object */
executeBaton->extBinds[index] = extBind;
goto exitPrepareAndBind;
}
ctx->callbackfn = Connection::cbDynBufferGet;
/* App specific callback */
ctx->data = (void *)executeBaton;
/* Data for App specific callback */
ctx->bndpos = index; /* for callback, bind position zero based */
ctx->nrows = 0; /* # of rows - will be filled in later */
ctx->iter = 0; /* # iteration - will be filled in later */
ctx->dpistmt = executeBaton->dpistmt; /* DPI Statement object */
executeBaton->extBinds[index] = extBind;
}
if ( !executeBaton->binds[index]->key.empty () )
{
// Bind by name
executeBaton->dpistmt->bind(
(const unsigned char*)executeBaton->binds[index]->key.c_str(),
@ -2630,83 +2614,8 @@ void Connection::PrepareAndBind (eBaton* executeBaton)
executeBaton->binds[index]->isOut) ?
extBind->fields.extDMLReturnCbCtx.ctx : NULL);
}
}
else
{
for(unsigned int index = 0 ;index < executeBaton->binds.size();
index++)
else
{
// Process bind enhancements CLOB/BLOB As String/Buffer for PL/SQL
if ( ( executeBaton->st == DpiStmtBegin ||
executeBaton->st == DpiStmtDeclare ||
executeBaton->st == DpiStmtCall ) &&
( executeBaton->binds[index]->type == DpiVarChar ||
executeBaton->binds[index]->type == DpiRaw ) )
{
ConvertStringOrBuffer2LOB ( executeBaton, index );
}
if ( !executeBaton->error.empty() )
{
goto exitPrepareAndBind;
}
// process LOB object for IN and INOUT bind
if ( ( executeBaton->binds[index]->isInOut ||
!executeBaton->binds[index]->isOut ) &&
( *(executeBaton->binds[index]->ind) != -1 ) &&
( executeBaton->binds[index]->type == DpiClob ||
executeBaton->binds[index]->type == DpiBlob ) )
{
PrepareLOBsForBind ( executeBaton, index );
}
// Allocate for OUT Binds
// For DML Returning, allocation happens through callback
if ( executeBaton->binds[index]->isOut &&
!executeBaton->stmtIsReturning &&
!executeBaton->binds[index]->value )
{
Connection::cbDynBufferAllocate ( executeBaton,
false, 1, index );
}
// Convert v8::Date to Oracle DB Type for IN and IN/OUT binds
if ( executeBaton->binds[index]->type == DpiTimestampLTZ &&
// InOut bind
(executeBaton->binds[index]->isInOut ||
// In bind
(!executeBaton->binds[index]->isOut &&
!executeBaton->binds[index]->isInOut)))
{
Connection::UpdateDateValue ( executeBaton,
executeBaton->binds[index], 1 ) ;
}
if ( executeBaton->stmtIsReturning &&
executeBaton->binds[index]->isOut )
{
extBind = new ExtBind ( NJS_EXTBIND_DMLRETCB );
DpiBindCallbackCtx *ctx = extBind->fields.extDMLReturnCbCtx.ctx =
(DpiBindCallbackCtx *) malloc ( sizeof ( DpiBindCallbackCtx ) );
if ( !ctx )
{
executeBaton->error = NJSMessages::getErrorMsg (
errInsufficientMemory );
goto exitPrepareAndBind;
}
ctx->callbackfn = Connection::cbDynBufferGet;
/* App specific callback */
ctx->data = (void *)executeBaton;
/* Data for App specific callback */
ctx->bndpos = index; /* for callback, bind position zero based */
ctx->nrows = 0; /* # of rows - will be filled in later */
ctx->iter = 0; /* # iteration - will be filled in later */
ctx->dpistmt = executeBaton->dpistmt; /* DPI Statement object */
executeBaton->extBinds[index] = extBind;
}
// Bind by position
executeBaton->dpistmt->bind(
index+1,executeBaton->binds[index]->type,

View File

@ -66,6 +66,9 @@ using namespace dpi;
class Connection;
class ProtoILob;
// Max number of bytes allowed for PLSQL STRING/BUFFER arguments
#define NJS_THRESHOLD_SIZE_PLSQL_STRING_ARG 32767
// Extended bind type
typedef enum
{
@ -760,6 +763,9 @@ private:
ProtoILob *protoILob,
bool isAutoCloseLob = true );
/*
* Inline function to identify v8 type from given v8::value
*/
static inline ValueType GetValueType ( v8::Local<v8::Value> v )
{
ValueType type = NJS_VALUETYPE_INVALID;
@ -796,6 +802,46 @@ private:
return type;
}
/*
* large-value for PL/SQL procedure use tempLob if underling column type
* is LOB, whether to use that feature for this bind or not
*/
static inline bool IsValue2TempLob ( eBaton *executeBaton,
unsigned int index )
{
bool ret = false;
Bind *bind = executeBaton->binds[index];
if ( !bind->isOut && !bind->isInOut ) // IN Bind case
{
// for non-NULL values with provided value len > threshold
if ( ( * ( bind-> ind ) != -1 ) &&
( * ( bind-> len ) > NJS_THRESHOLD_SIZE_PLSQL_STRING_ARG ) )
ret = true;
}
else if ( bind->isOut && !bind->isInOut ) // OUT Bind case
{
// Expected size is greater than threshold
if ( bind -> maxSize > NJS_THRESHOLD_SIZE_PLSQL_STRING_ARG )
{
ret = true;
}
}
else if ( bind->isInOut )
{
// For INOUT bind, either the given value len or expected size is
// greater than threshold
if ( max ( ( DPI_SZ_TYPE ) *( bind->len ), bind->maxSize ) >
NJS_THRESHOLD_SIZE_PLSQL_STRING_ARG )
{
ret = true;
}
}
return ret;
}
dpi::Conn* dpiconn_;
bool isValid_;

931
test/binding_DMLInsert.js Normal file
View File

@ -0,0 +1,931 @@
/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */
/******************************************************************************
*
* You may not use the identified files except in compliance with the Apache
* License, Version 2.0 (the "License.")
*
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*
* The node-oracledb test suite uses 'mocha', 'should' and 'async'.
* See LICENSE.md for relevant licenses.
*
* NAME
* 92. binding_DMLInsert.js
*
* DESCRIPTION
* This suite tests the data binding, including:
* Test cases insert oracledb type STRING/BUFFER to all db column types
* The cases take small/null/large bind values.
*
* NUMBERING RULE
* Test numbers follow this numbering rule:
* 1 - 20 are reserved for basic functional tests
* 21 - 50 are reserved for data type supporting tests
* 51 onwards are for other tests
*
*****************************************************************************/
'use strict';
var oracledb = require('oracledb');
var should = require('should');
var async = require('async');
var sql = require('./sql.js');
var dbConfig = require('./dbconfig.js');
var assist = require('./dataTypeAssist.js');
var random = require('./random.js');
describe('92.binding_DMLInsert.js', function() {
this.timeout(5000);
var connection = null;
var executeSql = function(sql, callback) {
connection.execute(
sql,
function(err) {
should.not.exist(err);
return callback();
}
);
};
before(function(done) {
oracledb.getConnection(dbConfig, function(err, conn) {
should.not.exist(err);
connection = conn;
done();
});
});
after(function(done) {
connection.release( function(err) {
should.not.exist(err);
done();
});
});
var doTest = function(table_name, content, dbColType, bindType, nullBind, largeVal, callback) {
async.series([
function(cb) {
var bindVar = { c: { val: content, type: bindType, dir: oracledb.BIND_IN } };
dmlInsert(table_name, dbColType, bindVar, bindType, nullBind, largeVal, cb);
},
function(cb) {
var bindVar =[ { val: content, type: bindType, dir: oracledb.BIND_IN } ];
dmlInsert(table_name, dbColType, bindVar, bindType, nullBind, largeVal,cb);
}
], callback);
};
var dmlInsert = function(table_name, dbColType, bindVar, bindType, nullBind, largeVal, callback) {
var createTable = sql.createTable(table_name, dbColType);
var drop_table = "DROP TABLE " + table_name + " PURGE";
async.series([
function(cb) {
executeSql(createTable, cb);
},
function(cb) {
connection.execute(
"insert into " + table_name + " ( content ) values (:c)",
bindVar,
function(err) {
if(largeVal === true) {
if(bindType === oracledb.STRING) {
compareErrMsg_string(dbColType, err);
} else {
compareErrMsg_buffer(dbColType, err);
}
} else {
if(bindType === oracledb.STRING) {
compareErrMsg_dml_string(nullBind, dbColType, err);
} else {
compareErrMsg_dml_buffer(dbColType, err);
}
}
cb();
}
);
},
function(cb) {
executeSql(drop_table, cb);
}
], callback);
};
var compareErrMsg_dml_string = function(nullBind, element, err) {
if(nullBind === true) {
should.not.exist(err);
} else {
if(element.indexOf("CHAR") > -1 || element === "CLOB") {
should.not.exist(err);
}
if(element === "NUMBER" || element.indexOf("FLOAT") > -1 || element === "BINARY_DOUBLE") {
// ORA-01722: invalid number
(err.message).should.startWith('ORA-01722:');
}
if(element === "TIMESTAMP" || element === "DATE") {
// ORA-01858: a non-numeric character was found where a numeric was expected
(err.message).should.startWith('ORA-01858');
}
if(element === "BLOB" || element.indexOf("RAW") > -1) {
// console.log(element+"======"+err);
// ORA-01465: invalid hex number
(err.message).should.startWith('ORA-01465:');
}
}
};
var compareErrMsg_dml_buffer = function(element, err) {
if(element === "NUMBER" || element === "DATE" || element === "TIMESTAMP" || element.indexOf("FLOAT") > -1) {
// NUMBER: ORA-00932: inconsistent datatypes: expected NUMBER got BINARY
// DATE: ORA-00932: inconsistent datatypes: expected DATE got BINARY
// TIMESTAMP: ORA-00932: inconsistent datatypes: expected TIMESTAMP got BINARY
// FLOAT: ORA-00932: inconsistent datatypes: expected BINARY_FLOAT got BINARY
(err.message).should.startWith('ORA-00932:');
}
if(element === "BLOB" || element === "CLOB" || element.indexOf("CHAR") > -1 || element.indexOf("RAW") > -1) {
should.not.exist(err);
}
};
var compareErrMsg_string = function(element, err) {
if(element.indexOf("CHAR") > -1) {
// ORA-12899: value too large for column "HR"."TABLE_9250"."CONTENT"
(err.message).should.startWith('ORA-12899:');
}
if(element === "NUMBER" || element.indexOf("FLOAT") > -1 || element === "BINARY_DOUBLE") {
// ORA-01722: invalid number
(err.message).should.startWith('ORA-01722:');
}
if(element === "DATE") {
// ORA-01858: a non-numeric character was found where a numeric was expected
(err.message).should.startWith('ORA-01858');
}
if(element === "TIMESTAMP") {
// ORA-01877: string is too long for internal buffer
(err.message).should.startWith('ORA-01877');
}
if(element === "BLOB" || element.indexOf("RAW") > -1) {
// console.log(element+"======"+err);
// ORA-01465: invalid hex number
(err.message).should.startWith('ORA-01465:');
}
if(element === "CLOB" ) {
should.not.exist(err);
}
};
var compareErrMsg_buffer = function(element, err) {
if(element === "NUMBER" || element === "DATE" || element === "TIMESTAMP" || element.indexOf("FLOAT") > -1) {
// NUMBER: ORA-00932: inconsistent datatypes: expected NUMBER got BINARY
// DATE: ORA-00932: inconsistent datatypes: expected DATE got BINARY
// TIMESTAMP: ORA-00932: inconsistent datatypes: expected TIMESTAMP got BINARY
// FLOAT: ORA-00932: inconsistent datatypes: expected BINARY_FLOAT got BINARY
(err.message).should.startWith('ORA-00932:');
}
if(element.indexOf("CHAR") > -1 || element.indexOf("RAW") > -1) {
// ORA-12899: value too large for column "HR"."TABLE_9250"."CONTENT"
(err.message).should.startWith('ORA-12899:');
}
if(element === "BLOB" || element === "CLOB") {
should.not.exist(err);
}
};
var tableNamePre = "table_92";
var index = 0;
describe('92.1 insert small value of oracledb.STRING/BUFFER', function() {
it('92.1.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.1.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
});
describe('92.2 insert null value of oracledb.STRING/BUFFER', function() {
it('92.2.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CHAR";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "DATE";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "RAW";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CLOB";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BLOB";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
it('92.2.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
var nullBind = true;
doTest(table_name, content, dbColType, bindType, nullBind, false, done);
});
});
describe('92.3 insert large value of oracledb.STRING/BUFFER', function() {
it('92.3.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var content = random.getRandomLenString(2000);
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = random.getRandomLenString(2000);
var bindType = oracledb.STRING;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = random.getRandomLenString(2000);
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var content = random.getRandomLenString(2000);
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = random.getRandomLenString(2000);
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = random.getRandomLenString(2000);
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = random.getRandomLenString(2000);
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "abc" + random.getRandomLenString(1997);
var bindType = oracledb.STRING;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var content = random.getRandomLenString(2000);
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var content = random.getRandomLenString(2000);
var bindType = oracledb.STRING;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = random.getRandomLenString(2000);
var bindType = oracledb.STRING;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = random.getRandomLenString(2000);
var bindType = oracledb.STRING;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(2000);
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(2000);
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(2000);
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(2000);
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(2000);
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(2000);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(2000);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(2000);
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(2000);
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(2000);
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(2000);
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
it('92.3.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(2000);
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, content, dbColType, bindType, nullBind, true, done);
});
});
});

View File

@ -0,0 +1,635 @@
/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */
/******************************************************************************
*
* You may not use the identified files except in compliance with the Apache
* License, Version 2.0 (the "License.")
*
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*
* The node-oracledb test suite uses 'mocha', 'should' and 'async'.
* See LICENSE.md for relevant licenses.
*
* NAME
* 98. binding_DMLReturningInto.js
*
* DESCRIPTION
* This suite tests the data binding, including:
* Test cases test returning into oracledb type STRING/BUFFER
* The cases take small/null bind values.
*
* NUMBERING RULE
* Test numbers follow this numbering rule:
* 1 - 20 are reserved for basic functional tests
* 21 - 50 are reserved for data type supporting tests
* 51 onwards are for other tests
*
*****************************************************************************/
'use strict';
var oracledb = require('oracledb');
var should = require('should');
var async = require('async');
var sql = require('./sql.js');
var dbConfig = require('./dbconfig.js');
var assist = require('./dataTypeAssist.js');
describe('98.binding_DMLReturningInto.js', function() {
this.timeout(5000);
var connection = null;
var executeSql = function(sql, callback) {
connection.execute(
sql,
function(err) {
should.not.exist(err);
return callback();
}
);
};
before(function(done) {
oracledb.getConnection(dbConfig, function(err, conn) {
should.not.exist(err);
connection = conn;
done();
});
});
after(function(done) {
connection.release( function(err) {
should.not.exist(err);
done();
});
});
var doTest = function(table_name, dbColType, content, bindType, nullBind, callback) {
var inserted = getInsertVal(dbColType, nullBind);
async.series([
function(cb) {
var bindVar = {
c: { val: inserted[0], type: inserted[1], dir: oracledb.BIND_IN },
output: { type: bindType, dir: oracledb.BIND_OUT, maxSize: 2000 }
};
dmlInsert(table_name, dbColType, bindVar, bindType, nullBind, cb);
},
function(cb) {
var bindVar =[ { val: inserted[0], type: inserted[1], dir: oracledb.BIND_IN }, { type: bindType, dir: oracledb.BIND_OUT, maxSize: 2000 } ];
dmlInsert(table_name, dbColType, bindVar, bindType, nullBind, cb);
}
], callback);
};
var getInsertVal = function(element, nullBind) {
var insertValue = [];
if(element.indexOf("CHAR") > -1 || element === "CLOB") {
insertValue[0] = (nullBind===true) ? null : "abcsca";
insertValue[1] = oracledb.STRING;
}
if(element === "BINARY_DOUBLE" || element.indexOf("FLOAT") > -1 || element === "NUMBER") {
insertValue[0] = (nullBind===true) ? null : 1;
insertValue[1] = oracledb.NUMBER;
}
if(element === "TIMESTAMP" || element === "DATE") {
insertValue[0] = (nullBind===true) ? null : new Date(0);
insertValue[1] = oracledb.DATE;
}
if(element === "BLOB" || element.indexOf("RAW") > -1 ) {
insertValue[0] = (nullBind===true) ? null : assist.createBuffer(100);
insertValue[1] = oracledb.BUFFER;
}
return insertValue;
};
var dmlInsert = function(table_name, dbColType, bindVar, bindType, nullBind, callback) {
var createTable = sql.createTable(table_name, dbColType);
var drop_table = "DROP TABLE " + table_name + " PURGE";
async.series([
function(cb) {
executeSql(createTable, cb);
},
function(cb) {
connection.execute(
"insert into " + table_name + " ( content ) values (:c) returning content into :output",
bindVar,
function(err) {
if(bindType === oracledb.STRING) {
compareStrErrMsg(dbColType, err);
} else {
// NJS-028: RAW database type is not supported with DML Returning statements
(err.message).should.startWith('NJS-028:');
}
cb();
}
);
},
function(cb) {
executeSql(drop_table, cb);
}
], callback);
};
var compareStrErrMsg = function(element, err) {
if(element === "BLOB" && (connection.oracleServerVersion < 1202000100)) {
// ORA-00932: inconsistent datatypes: expected CHAR got BLOB
(err.message).should.startWith('ORA-00932:');
} else {
should.not.exist(err);
}
}
var tableNamePre = "table_981";
var index = 0;
describe('98.1 bind out small value', function() {
it('98.1.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.1.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
});
describe('98.2 bind out null value', function() {
it('98.2.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CHAR";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "DATE";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "RAW";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CLOB";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BLOB";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
it('98.2.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
var nullBind = true;
doTest(table_name, dbColType, content, bindType, nullBind, done);
});
});
});

View File

@ -0,0 +1,729 @@
/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */
/******************************************************************************
*
* You may not use the identified files except in compliance with the Apache
* License, Version 2.0 (the "License.")
*
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*
* The node-oracledb test suite uses 'mocha', 'should' and 'async'.
* See LICENSE.md for relevant licenses.
*
* NAME
* 100. binding_defaultBindIn.js
*
* DESCRIPTION
* This suite tests the data binding, including:
* Test cases test bind in oracledb type STRING/BUFFER to all db column types using plsql procedure and function
* The cases use default bind type and dir.
* The cases take null bind values.
*
* NUMBERING RULE
* Test numbers follow this numbering rule:
* 1 - 20 are reserved for basic functional tests
* 21 - 50 are reserved for data type supporting tests
* 51 onwards are for other tests
*
*****************************************************************************/
'use strict';
var oracledb = require('oracledb');
var should = require('should');
var async = require('async');
var sql = require('./sql.js');
var dbConfig = require('./dbconfig.js');
describe('100.binding_defaultBindIn.js', function() {
this.timeout(5000);
var connection = null;
var executeSql = function(sql, callback) {
connection.execute(
sql,
function(err) {
should.not.exist(err);
return callback();
}
);
};
before(function(done) {
oracledb.getConnection(dbConfig, function(err, conn) {
should.not.exist(err);
connection = conn;
done();
});
});
after(function(done) {
connection.release( function(err) {
should.not.exist(err);
done();
});
});
var doTest1 = function(table_name, proc_name, dbColType, content, bindType, callback) {
async.series([
function(cb) {
var bindVar = { c: content };
inBind1(table_name, proc_name, dbColType, bindVar, bindType, cb);
},
function(cb) {
var bindVar =[ content ];
inBind1(table_name, proc_name, dbColType, bindVar, bindType, cb);
}
], callback);
};
var doTest2 = function(table_name, procName, bindType, dbColType, content, sequence, callback) {
async.series([
function(cb) {
var bindVar = {
i: sequence,
c: content,
output: { type: oracledb.NUMBER, dir: oracledb.BIND_OUT }
};
inBind2(table_name, procName, dbColType, bindVar, bindType, cb);
},
function(cb) {
var bindVar =[ { type: oracledb.NUMBER, dir: oracledb.BIND_OUT }, sequence, content ];
inBind2(table_name, procName, dbColType, bindVar, bindType, cb);
}
], callback);
};
var inBind1 = function(table_name, proc_name, dbColType, bindVar, bindType, callback) {
var createTable = sql.createTable(table_name, dbColType);
var drop_table = "DROP TABLE " + table_name + " PURGE";
var proc = "CREATE OR REPLACE PROCEDURE " + proc_name + " (inValue IN " + dbColType + ")\n" +
"AS \n" +
"BEGIN \n" +
" insert into " + table_name + " ( content ) values (inValue); \n" +
"END " + proc_name + "; ";
var sqlRun = "BEGIN " + proc_name + " (:c); END;";
var proc_drop = "DROP PROCEDURE " + proc_name;
async.series([
function(cb) {
executeSql(createTable, cb);
},
function(cb) {
executeSql(proc, cb);
},
function(cb) {
connection.execute(
sqlRun,
bindVar,
function(err) {
compareErrMsg(dbColType, err);
cb();
}
);
},
function(cb) {
executeSql(proc_drop, cb);
},
function(cb) {
executeSql(drop_table, cb);
}
], callback);
};
var inBind2 = function(table_name, fun_name, dbColType, bindVar, bindType, callback) {
var createTable = sql.createTable(table_name, dbColType);
var drop_table = "DROP TABLE " + table_name + " PURGE";
var proc = "CREATE OR REPLACE FUNCTION " + fun_name + " (ID IN NUMBER, inValue IN " + dbColType + ") RETURN NUMBER\n" +
"IS \n" +
" tmpvar NUMBER; \n" +
"BEGIN \n" +
" insert into " + table_name + " ( id, content ) values (ID, inValue); \n" +
" select id into tmpvar from " + table_name + " where id = ID; \n" +
" RETURN tmpvar; \n" +
"END ; ";
var sqlRun = "BEGIN :output := " + fun_name + " (:i, :c); END;";
var proc_drop = "DROP FUNCTION " + fun_name;
// console.log(proc);
async.series([
function(cb) {
executeSql(createTable, cb);
},
function(cb) {
executeSql(proc, cb);
},
function(cb) {
connection.execute(
sqlRun,
bindVar,
function(err) {
compareErrMsg(dbColType, err);
cb();
}
);
},
function(cb) {
executeSql(proc_drop, cb);
},
function(cb) {
executeSql(drop_table, cb);
}
], callback);
};
var compareErrMsg = function(element, err) {
if(element === "BLOB") {
// ORA-06550: line 1, column 7:
// PLS-00306: wrong number or types of arguments in call to 'NODB_INBIND_XX'
// ORA-06550: line 1, column 7:
// PL/SQL: Statement ignored
(err.message).should.startWith('ORA-06550:');
} else {
should.not.exist(err);
}
};
var tableNamePre = "table_100";
var procPre = "proc_100";
var index = 0;
describe('100.1 PLSQL procedure: bind in null value with default type and dir', function() {
it('100.1.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.2 oracledb.STRING <--> DB: CHAR', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CHAR";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.8 oracledb.STRING <--> DB: DATE', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "DATE";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.10 oracledb.STRING <--> DB: RAW', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "RAW";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.11 oracledb.STRING <--> DB: CLOB', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CLOB";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.12 oracledb.STRING <--> DB: BLOB', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BLOB";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
it('100.1.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
doTest1(table_name, proc_name, dbColType, content, bindType, done);
});
});
describe('100.2 PLSQL function: bind in null value with default type and dir', function() {
it('100.2.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.2 oracledb.STRING <--> DB: CHAR', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CHAR";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.8 oracledb.STRING <--> DB: DATE', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "DATE";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.10 oracledb.STRING <--> DB: RAW', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "RAW";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.11 oracledb.STRING <--> DB: CLOB', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CLOB";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.12 oracledb.STRING <--> DB: BLOB', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BLOB";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('100.2.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index ++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
});
});

View File

@ -0,0 +1,734 @@
/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */
/******************************************************************************
*
* You may not use the identified files except in compliance with the Apache
* License, Version 2.0 (the "License.")
*
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*
* The node-oracledb test suite uses 'mocha', 'should' and 'async'.
* See LICENSE.md for relevant licenses.
*
* NAME
* 101. binding_defaultBindInout.js
*
* DESCRIPTION
* This suite tests the data binding, including:
* Test cases test bind inout oracledb type STRING/BUFFER to all db column types using plsql procedure and function
* The cases use default bind type and dir.
* The cases take null bind values.
*
* NUMBERING RULE
* Test numbers follow this numbering rule:
* 1 - 20 are reserved for basic functional tests
* 21 - 50 are reserved for data type supporting tests
* 51 onwards are for other tests
*
*****************************************************************************/
'use strict';
var oracledb = require('oracledb');
var should = require('should');
var async = require('async');
var sql = require('./sql.js');
var dbConfig = require('./dbconfig.js');
describe('101.binding_defaultBindInout.js', function() {
this.timeout(5000);
var connection = null;
var executeSql = function(sql, callback) {
connection.execute(
sql,
function(err) {
should.not.exist(err);
return callback();
}
);
};
before(function(done) {
oracledb.getConnection(dbConfig, function(err, conn) {
should.not.exist(err);
connection = conn;
done();
});
});
after(function(done) {
connection.release( function(err) {
should.not.exist(err);
done();
});
});
var doTest1 = function(table_name, procName, bindType, dbColType, content, sequence, callback) {
async.series([
function(cb) {
var bindVar = {
i: sequence,
c: content
};
inBind1(table_name, procName, dbColType, bindVar, bindType, cb);
},
function(cb) {
var bindVar =[ sequence, content ];
inBind1(table_name, procName, dbColType, bindVar, bindType, cb);
}
], callback);
};
var inBind1 = function(table_name, proc_name, dbColType, bindVar, bindType, callback) {
var createTable = sql.createTable(table_name, dbColType);
var drop_table = "DROP TABLE " + table_name + " PURGE";
var proc = "CREATE OR REPLACE PROCEDURE " + proc_name + " (ID IN NUMBER, inValue IN OUT " + dbColType + ")\n" +
"AS \n" +
"BEGIN \n" +
" insert into " + table_name + " ( id, content ) values (ID, inValue); \n" +
" select content into inValue from " + table_name + " where id = ID; \n" +
"END " + proc_name + "; ";
var sqlRun = "BEGIN " + proc_name + " (:i, :c); END;";
var proc_drop = "DROP PROCEDURE " + proc_name;
// console.log(proc);
async.series([
function(cb) {
executeSql(createTable, cb);
},
function(cb) {
executeSql(proc, cb);
},
function(cb) {
connection.execute(
sqlRun,
bindVar,
function(err) {
compareErrMsg(dbColType, err);
cb();
}
);
},
function(cb) {
executeSql(proc_drop, cb);
},
function(cb) {
executeSql(drop_table, cb);
}
], callback);
};
var doTest2 = function(table_name, procPre, bindType, dbColType, content, sequence, callback) {
async.series([
function(cb) {
var bindVar = {
i: sequence,
c: content,
output: { type: oracledb.NUMBER, dir: oracledb.BIND_OUT }
};
inBind2(table_name, procPre, dbColType, bindVar, bindType, cb);
},
function(cb) {
var bindVar =[ { type: oracledb.NUMBER, dir: oracledb.BIND_OUT }, sequence, content ];
inBind2(table_name, procPre, dbColType, bindVar, bindType, cb);
}
], callback);
};
var inBind2 = function(table_name, fun_name, dbColType, bindVar, bindType, callback) {
var createTable = sql.createTable(table_name, dbColType);
var drop_table = "DROP TABLE " + table_name + " PURGE";
var proc = "CREATE OR REPLACE FUNCTION " + fun_name + " (ID IN NUMBER, inValue IN OUT " + dbColType + ") RETURN NUMBER\n" +
"IS \n" +
" tmpvar NUMBER; \n" +
"BEGIN \n" +
" insert into " + table_name + " ( id, content ) values (ID, inValue); \n" +
" select id, content into tmpvar, inValue from " + table_name + " where id = ID; \n" +
" RETURN tmpvar; \n" +
"END ; ";
var sqlRun = "BEGIN :output := " + fun_name + " (:i, :c); END;";
var proc_drop = "DROP FUNCTION " + fun_name;
// console.log(proc);
async.series([
function(cb) {
executeSql(createTable, cb);
},
function(cb) {
executeSql(proc, cb);
},
function(cb) {
connection.execute(
sqlRun,
bindVar,
function(err) {
compareErrMsg(dbColType, err);
cb();
}
);
},
function(cb) {
executeSql(proc_drop, cb);
},
function(cb) {
executeSql(drop_table, cb);
}
], callback);
};
var compareErrMsg = function(element, err) {
if(element === "BLOB") {
// ORA-06550: line 1, column 7:
// PLS-00306: wrong number or types of arguments in call to 'NODB_INBIND_XX'
// ORA-06550: line 1, column 7:
// PL/SQL: Statement ignored
(err.message).should.startWith('ORA-06550:');
} else {
should.not.exist(err);
}
};
var tableNamePre = "table_101";
var procPre = "proc_101";
var index = 1;
describe('101.1 PLSQL procedure: bind out null value with default type and dir', function() {
it('101.1.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CHAR";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "DATE";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "RAW";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CLOB";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BLOB";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.1.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
doTest1(table_name, proc_name, bindType, dbColType, content, index, done);
});
});
describe('101.2 PLSQL function: bind out null value with default type and dir', function() {
it('101.2.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CHAR";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "DATE";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "RAW";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CLOB";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BLOB";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
it('101.2.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
doTest2(table_name, proc_name, bindType, dbColType, content, index, done);
});
});
});

View File

@ -0,0 +1,718 @@
/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */
/******************************************************************************
*
* You may not use the identified files except in compliance with the Apache
* License, Version 2.0 (the "License.")
*
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*
* The node-oracledb test suite uses 'mocha', 'should' and 'async'.
* See LICENSE.md for relevant licenses.
*
* NAME
* 99. binding_functionBindIn.js
*
* DESCRIPTION
* This suite tests the data binding, including:
* Test cases bind in oracledb type STRING/BUFFER to all db column types using plsql function
* The cases take small/null bind values.
*
* NUMBERING RULE
* Test numbers follow this numbering rule:
* 1 - 20 are reserved for basic functional tests
* 21 - 50 are reserved for data type supporting tests
* 51 onwards are for other tests
*
*****************************************************************************/
'use strict';
var oracledb = require('oracledb');
var should = require('should');
var async = require('async');
var sql = require('./sql.js');
var dbConfig = require('./dbconfig.js');
var assist = require('./dataTypeAssist.js');
describe('99.binding_functionBindIn.js', function() {
this.timeout(5000);
var connection = null;
var executeSql = function(sql, callback) {
connection.execute(
sql,
function(err) {
should.not.exist(err);
return callback();
}
);
};
before(function(done) {
oracledb.getConnection(dbConfig, function(err, conn) {
should.not.exist(err);
connection = conn;
done();
});
});
after(function(done) {
connection.release( function(err) {
should.not.exist(err);
done();
});
});
var doTest = function(table_name, procName, bindType, dbColType, content, sequence, nullBind, callback) {
async.series([
function(cb) {
var bindVar = {
i: { val: sequence, type: oracledb.NUMBER, dir: oracledb.BIND_IN },
c: { val: content, type: bindType, dir: oracledb.BIND_IN },
output: { type: oracledb.NUMBER, dir: oracledb.BIND_OUT }
};
inBind(table_name, procName, dbColType, bindVar, bindType, nullBind, cb);
},
function(cb) {
var bindVar =[ { type: oracledb.NUMBER, dir: oracledb.BIND_OUT }, sequence, { val: content, type: bindType, dir: oracledb.BIND_IN } ];
inBind(table_name, procName, dbColType, bindVar, bindType, nullBind, cb);
}
], callback);
};
var inBind = function(table_name, fun_name, dbColType, bindVar, bindType, nullBind, callback) {
var createTable = sql.createTable(table_name, dbColType);
var drop_table = "DROP TABLE " + table_name + " PURGE";
var proc = "CREATE OR REPLACE FUNCTION " + fun_name + " (ID IN NUMBER, inValue IN " + dbColType + ") RETURN NUMBER\n" +
"IS \n" +
" tmpvar NUMBER; \n" +
"BEGIN \n" +
" insert into " + table_name + " ( id, content ) values (ID, inValue); \n" +
" select id into tmpvar from " + table_name + " where id = ID; \n" +
" RETURN tmpvar; \n" +
"END ; ";
var sqlRun = "BEGIN :output := " + fun_name + " (:i, :c); END;";
var proc_drop = "DROP FUNCTION " + fun_name;
// console.log(proc);
async.series([
function(cb) {
executeSql(createTable, cb);
},
function(cb) {
executeSql(proc, cb);
},
function(cb) {
connection.execute(
sqlRun,
bindVar,
function(err) {
if(bindType === oracledb.STRING) {
compareErrMsgForString(nullBind,dbColType, err);
} else {
compareErrMsgForRAW(dbColType, err);
}
cb();
}
);
},
function(cb) {
executeSql(proc_drop, cb);
},
function(cb) {
executeSql(drop_table, cb);
}
], callback);
};
var compareErrMsgForString = function(nullBind, element, err) {
if(element === "BLOB") {
// ORA-06550: line 1, column 7:
// PLS-00306: wrong number or types of arguments in call to 'NODB_INBIND_12'
// ORA-06550: line 1, column 7:
// PL/SQL: Statement ignored
(err.message).should.startWith('ORA-06550:');
} else {
if(nullBind === true) {
should.not.exist(err);
} else {
if(element.indexOf("CHAR") > -1 || element === "CLOB") {
should.not.exist(err);
}
if(element.indexOf("FLOAT") > -1 || element === "NUMBER" || element.indexOf("RAW") > -1) {
// FLOAT ORA-06502: PL/SQL: numeric or value error: character to number conversion error
// BINARY_FLOAT ORA-06502: PL/SQL: numeric or value error
// NUMBER: ORA-06502: PL/SQL: numeric or value error: character to number conversion error
// RAW: ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error
(err.message).should.startWith('ORA-06502:');
}
if(element === "BINARY_DOUBLE") {
// ORA-01847: ORA-06502: PL/SQL: numeric or value error
(err.message).should.startWith('ORA-06502:');
}
if(element === "DATE" || element === "TIMESTAMP") {
// ORA-01858: a non-numeric character was found where a numeric was expected
(err.message).should.startWith('ORA-01858:');
}
}
}
};
var compareErrMsgForRAW = function(element, err) {
if(element === "NUMBER" || element.indexOf("FLOAT") > -1 || element === "BINARY_DOUBLE" || element === "DATE" || element === "TIMESTAMP" || element === "CLOB") {
// ORA-06550: line 1, column 7:
// PLS-00306: wrong number or types of arguments in call to 'NODB_INBIND_XX'
// ORA-06550: line 1, column 7:
// PL/SQL: Statement ignored
(err.message).should.startWith('ORA-06550:');
}
if(element.indexOf("CHAR") > -1 || element.indexOf("RAW") > -1 || element === "BLOB") {
should.not.exist(err);
}
};
var tableNamePre = "table_99";
var procPre = "proc_99";
var index = 1;
describe('99.1 PLSQL function: bind in small value of oracledb.STRING/BUFFER', function() {
it('99.1.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.1.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
});
describe('99.2 PLSQL function: bind in null value of oracledb.STRING/BUFFER', function() {
it('99.2.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "DATE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "RAW";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('99.2.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
});
});

View File

@ -0,0 +1,726 @@
/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */
/******************************************************************************
*
* You may not use the identified files except in compliance with the Apache
* License, Version 2.0 (the "License.")
*
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*
* The node-oracledb test suite uses 'mocha', 'should' and 'async'.
* See LICENSE.md for relevant licenses.
*
* NAME
* 95. binding_functionBindInout.js
*
* DESCRIPTION
* This suite tests the data binding, including:
* Test cases bind inout oracledb type STRING/BUFFER to all db column types using plsql function
* The cases take small/null bind values.
*
* NUMBERING RULE
* Test numbers follow this numbering rule:
* 1 - 20 are reserved for basic functional tests
* 21 - 50 are reserved for data type supporting tests
* 51 onwards are for other tests
*
*****************************************************************************/
'use strict';
var oracledb = require('oracledb');
var should = require('should');
var async = require('async');
var sql = require('./sql.js');
var dbConfig = require('./dbconfig.js');
var assist = require('./dataTypeAssist.js');
describe('95.binding_functionBindInout.js', function() {
this.timeout(5000);
var connection = null;
var executeSql = function(sql, callback) {
connection.execute(
sql,
function(err) {
should.not.exist(err);
return callback();
}
);
};
before(function(done) {
oracledb.getConnection(dbConfig, function(err, conn) {
should.not.exist(err);
connection = conn;
done();
});
});
after(function(done) {
connection.release( function(err) {
should.not.exist(err);
done();
});
});
var doTest = function(table_name, procPre, bindType, dbColType, content, sequence, nullBind, callback) {
async.series([
function(cb) {
var bindVar = {
i: { val: sequence, type: oracledb.NUMBER, dir: oracledb.BIND_IN },
c: { val: content, type: bindType, dir: oracledb.BIND_INOUT, maxSize: 1000 },
output: { type: oracledb.NUMBER, dir: oracledb.BIND_OUT }
};
inBind(table_name, procPre, dbColType, bindVar, bindType, nullBind, cb);
},
function(cb) {
var bindVar =[ { type: oracledb.NUMBER, dir: oracledb.BIND_OUT }, sequence, { val: content, type: bindType, dir: oracledb.BIND_INOUT, maxSize: 1000 } ];
inBind(table_name, procPre, dbColType, bindVar, bindType, nullBind, cb);
}
], callback);
};
var inBind = function(table_name, fun_name, dbColType, bindVar, bindType, nullBind, callback) {
var createTable = sql.createTable(table_name, dbColType);
var drop_table = "DROP TABLE " + table_name + " PURGE";
var proc = "CREATE OR REPLACE FUNCTION " + fun_name + " (ID IN NUMBER, inValue IN OUT " + dbColType + ") RETURN NUMBER\n" +
"IS \n" +
" tmpvar NUMBER; \n" +
"BEGIN \n" +
" insert into " + table_name + " ( id, content ) values (ID, inValue); \n" +
" select id, content into tmpvar, inValue from " + table_name + " where id = ID; \n" +
" RETURN tmpvar; \n" +
"END ; ";
var sqlRun = "BEGIN :output := " + fun_name + " (:i, :c); END;";
var proc_drop = "DROP FUNCTION " + fun_name;
// console.log(proc);
async.series([
function(cb) {
executeSql(createTable, cb);
},
function(cb) {
executeSql(proc, cb);
},
function(cb) {
connection.execute(
sqlRun,
bindVar,
function(err) {
if(bindType === oracledb.STRING) {
compareErrMsgForString(nullBind, dbColType, err);
} else {
compareErrMsgForRAW(nullBind, dbColType, err);
}
cb();
}
);
},
function(cb) {
executeSql(proc_drop, cb);
},
function(cb) {
executeSql(drop_table, cb);
}
], callback);
};
var compareErrMsgForString = function(nullBind, element, err) {
if(element === "BLOB") {
// ORA-06550: line 1, column 7:
// PLS-00306: wrong number or types of arguments in call to 'NODB_INBIND_XX'
// ORA-06550: line 1, column 7:
// PL/SQL: Statement ignored
(err.message).should.startWith('ORA-06550:');
} else {
if(nullBind === true) {
should.not.exist(err);
} else {
if(element.indexOf("CHAR") > -1 || element === "CLOB") {
should.not.exist(err);
}
if(element.indexOf("FLOAT") > -1 || element === "NUMBER" || element.indexOf("RAW") > -1) {
// FLOAT ORA-06502: PL/SQL: numeric or value error: character to number conversion error
// BINARY_FLOAT ORA-06502: PL/SQL: numeric or value error
// NUMBER: ORA-06502: PL/SQL: numeric or value error: character to number conversion error
// RAW: ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error
(err.message).should.startWith('ORA-06502:');
}
if(element === "BINARY_DOUBLE") {
// ORA-01847: ORA-06502: PL/SQL: numeric or value error
(err.message).should.startWith('ORA-06502:');
}
if(element === "DATE" || element === "TIMESTAMP") {
// ORA-01858: a non-numeric character was found where a numeric was expected
(err.message).should.startWith('ORA-01858:');
}
}
}
};
var compareErrMsgForRAW = function(nullBind, element, err) {
if(element === "NUMBER" || element.indexOf("FLOAT") > -1 || element === "BINARY_DOUBLE" || element === "DATE" || element === "TIMESTAMP" || element === "CLOB") {
// ORA-06550: line 1, column 7:
// PLS-00306: wrong number or types of arguments in call to 'NODB_INBIND_XX'
// ORA-06550: line 1, column 7:
// PL/SQL: Statement ignored
(err.message).should.startWith('ORA-06550:');
}
if(element.indexOf("RAW") > -1 || element === "BLOB" || element === "VARCHAR2") {
should.not.exist(err);
}
if(element === "NCHAR" || element === "CHAR") {
if(nullBind === true) {
should.not.exist(err);
} else {
// ORA-06502: PL/SQL: numeric or value error: raw variable length too long
(err.message).should.startWith('ORA-06502:');
}
}
};
var tableNamePre = "table_95";
var procPre = "proc_95";
var index = 1;
describe('95.1 PLSQL function: bind inout small value of oracledb.STRING/BUFFER', function() {
it('95.1.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.1.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
});
describe('95.2 PLSQL function: bind inout null value of oracledb.STRING/BUFFER', function() {
it('95.2.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "DATE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "RAW";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('95.2.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
});
});

View File

@ -0,0 +1,742 @@
/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */
/******************************************************************************
*
* You may not use the identified files except in compliance with the Apache
* License, Version 2.0 (the "License.")
*
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*
* The node-oracledb test suite uses 'mocha', 'should' and 'async'.
* See LICENSE.md for relevant licenses.
*
* NAME
* 97. binding_functionBindOut.js
*
* DESCRIPTION
* This suite tests the data binding, including:
* Test cases get oracledb type STRING/BUFFER from all db column types using plsql function
* The cases take small/null bind values.
*
* NUMBERING RULE
* Test numbers follow this numbering rule:
* 1 - 20 are reserved for basic functional tests
* 21 - 50 are reserved for data type supporting tests
* 51 onwards are for other tests
*
*****************************************************************************/
'use strict';
var oracledb = require('oracledb');
var should = require('should');
var async = require('async');
var sql = require('./sql.js');
var dbConfig = require('./dbconfig.js');
var assist = require('./dataTypeAssist.js');
describe('97.binding_functionBindOut.js', function() {
this.timeout(5000);
var connection = null;
var executeSql = function(sql, callback) {
connection.execute(
sql,
function(err) {
should.not.exist(err);
return callback();
}
);
};
before(function(done) {
oracledb.getConnection(dbConfig, function(err, conn) {
should.not.exist(err);
connection = conn;
done();
});
});
after(function(done) {
connection.release( function(err) {
should.not.exist(err);
done();
});
});
var doTest = function(table_name, procPre, bindType, dbColType, content, sequence, nullBind, callback) {
async.series([
function(cb) {
var bindVar = {
i: { val: sequence, type: oracledb.NUMBER, dir: oracledb.BIND_IN },
c: { type: bindType, dir: oracledb.BIND_OUT, maxSize: 1000 },
output: { type: oracledb.NUMBER, dir: oracledb.BIND_OUT, maxSize: 1000 }
};
inBind(table_name, procPre, sequence, dbColType, bindVar, bindType, nullBind, cb);
},
function(cb) {
var bindVar =[ { type: oracledb.NUMBER, dir: oracledb.BIND_OUT, maxSize: 1000 }, sequence, { type: bindType, dir: oracledb.BIND_OUT, maxSize: 1000 } ];
inBind(table_name, procPre, sequence, dbColType, bindVar, bindType, nullBind, cb);
}
], callback);
};
var getInsertVal = function(element, nullBind) {
var insertValue = [];
if(element.indexOf("CHAR") > -1 || element === "CLOB") {
insertValue[0] = (nullBind===true) ? null : "abcsca";
insertValue[1] = oracledb.STRING;
}
if(element === "BINARY_DOUBLE" || element.indexOf("FLOAT") > -1 || element === "NUMBER") {
insertValue[0] = (nullBind===true) ? null : 1;
insertValue[1] = oracledb.NUMBER;
}
if(element === "TIMESTAMP" || element === "DATE") {
insertValue[0] = (nullBind===true) ? null : new Date(0);
insertValue[1] = oracledb.DATE;
}
if(element === "BLOB" || element.indexOf("RAW") > -1 ) {
insertValue[0] = (nullBind===true) ? null : assist.createBuffer(100);
insertValue[1] = oracledb.BUFFER;
}
return insertValue;
};
var inBind = function(table_name, fun_name, sequence, dbColType, bindVar, bindType, nullBind, callback) {
var createTable = sql.createTable(table_name, dbColType);
var drop_table = "DROP TABLE " + table_name + " PURGE";
var proc = "CREATE OR REPLACE FUNCTION " + fun_name + " (ID IN NUMBER, inValue OUT " + dbColType + ") RETURN NUMBER\n" +
"IS \n" +
" tmpvar NUMBER; \n" +
"BEGIN \n" +
" select id, content into tmpvar, inValue from " + table_name + " where id = ID; \n" +
" RETURN tmpvar; \n" +
"END ; ";
var sqlRun = "BEGIN :output := " + fun_name + " (:i, :c); END;";
var proc_drop = "DROP FUNCTION " + fun_name;
// console.log(proc);
var inserted = getInsertVal(dbColType, nullBind);
var insertSql = "insert into " + table_name + " (id, content) values (:c1, :c2)";
async.series([
function(cb) {
executeSql(createTable, cb);
},
function(cb) {
var bind = {
c1: { val: sequence, type: oracledb.NUMBER, dir: oracledb.BIND_IN },
c2: { val: inserted[0], type: inserted[1], dir: oracledb.BIND_IN }
};
// console.log(insertSql);
connection.execute(
insertSql,
bind,
function(err, result) {
should.not.exist(err);
should.strictEqual(result.rowsAffected, 1);
cb();
});
},
function(cb) {
executeSql(proc, cb);
},
function(cb) {
connection.execute(
sqlRun,
bindVar,
function(err) {
if(bindType === oracledb.STRING) {
compareErrMsgForString(dbColType, err);
} else {
compareErrMsgForRAW(nullBind, dbColType, err);
}
cb();
}
);
},
function(cb) {
executeSql(proc_drop, cb);
},
function(cb) {
executeSql(drop_table, cb);
}
], callback);
};
var compareErrMsgForString = function(element, err) {
if(element === "BLOB") {
// ORA-06550: line 1, column 7:
// PLS-00306: wrong number or types of arguments in call to 'NODB_INBIND_12'
// ORA-06550: line 1, column 7:
// PL/SQL: Statement ignored
(err.message).should.startWith('ORA-06550:');
} else {
should.not.exist(err);
}
};
var compareErrMsgForRAW = function(nullBind, element, err) {
if(element === "NUMBER" || element.indexOf("FLOAT") > -1 || element === "BINARY_DOUBLE" || element === "DATE" || element === "TIMESTAMP" || element === "CLOB") {
// ORA-06550: line 1, column 7:
// PLS-00306: wrong number or types of arguments in call to 'NODB_INBIND_XX'
// ORA-06550: line 1, column 7:
// PL/SQL: Statement ignored
(err.message).should.startWith('ORA-06550:');
}
if(element.indexOf("RAW") > -1 || element === "BLOB") {
should.not.exist(err);
}
if(element.indexOf("CHAR") > -1) {
if(nullBind===true) {
should.not.exist(err);
} else {
// ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error
(err.message).should.startWith('ORA-06502:');
}
}
};
var tableNamePre = "table_97";
var procPre = "proc_97";
var index = 1;
describe('97.1 PLSQL function: bind out small value to oracledb.STRING/BUFFER', function() {
it('97.1.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.1.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
});
describe('97.2 PLSQL function: bind out small value to oracledb.STRING/BUFFER', function() {
it('97.2.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "DATE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "RAW";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('97.2.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
});
});

View File

@ -0,0 +1,710 @@
/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */
/******************************************************************************
*
* You may not use the identified files except in compliance with the Apache
* License, Version 2.0 (the "License.")
*
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*
* The node-oracledb test suite uses 'mocha', 'should' and 'async'.
* See LICENSE.md for relevant licenses.
*
* NAME
* 93. binding_procedureBindIn.js
*
* DESCRIPTION
* This suite tests the data binding, including:
* Test cases bind in oracledb type STRING/BUFFER to all db column types using plsql procedure
* The cases take small/null bind values.
*
* NUMBERING RULE
* Test numbers follow this numbering rule:
* 1 - 20 are reserved for basic functional tests
* 21 - 50 are reserved for data type supporting tests
* 51 onwards are for other tests
*
*****************************************************************************/
'use strict';
var oracledb = require('oracledb');
var should = require('should');
var async = require('async');
var sql = require('./sql.js');
var dbConfig = require('./dbconfig.js');
var assist = require('./dataTypeAssist.js');
describe('93.binding_procedureBindIn.js', function() {
this.timeout(5000);
var connection = null;
var executeSql = function(sql, callback) {
connection.execute(
sql,
function(err) {
should.not.exist(err);
return callback();
}
);
};
before(function(done) {
oracledb.getConnection(dbConfig, function(err, conn) {
should.not.exist(err);
connection = conn;
done();
});
});
after(function(done) {
connection.release( function(err) {
should.not.exist(err);
done();
});
});
var doTest = function(table_name, proc_name, dbColType, content, bindType, nullBind, callback) {
async.series([
function(cb) {
var bindVar = { c: { val: content, type: bindType, dir: oracledb.BIND_IN } };
inBind(table_name, procPre, dbColType, bindVar, bindType, nullBind, cb);
},
function(cb) {
var bindVar =[ { val: content, type: bindType, dir: oracledb.BIND_IN } ];
inBind(table_name, procPre, dbColType, bindVar, bindType, nullBind, cb);
}
], callback);
};
var inBind = function(table_name, proc_name, dbColType, bindVar, bindType, nullBind, callback) {
var createTable = sql.createTable(table_name, dbColType);
var drop_table = "DROP TABLE " + table_name + " PURGE";
var proc = "CREATE OR REPLACE PROCEDURE " + proc_name + " (inValue IN " + dbColType + ")\n" +
"AS \n" +
"BEGIN \n" +
" insert into " + table_name + " ( content ) values (inValue); \n" +
"END " + proc_name + "; ";
var sqlRun = "BEGIN " + proc_name + " (:c); END;";
var proc_drop = "DROP PROCEDURE " + proc_name;
async.series([
function(cb) {
executeSql(createTable, cb);
},
function(cb) {
executeSql(proc, cb);
},
function(cb) {
connection.execute(
sqlRun,
bindVar,
function(err) {
if(bindType === oracledb.STRING) {
compareErrMsgForString(nullBind, dbColType, err);
} else {
compareErrMsgForRAW(dbColType, err);
}
cb();
}
);
},
function(cb) {
executeSql(proc_drop, cb);
},
function(cb) {
executeSql(drop_table, cb);
}
], callback);
};
var compareErrMsgForString = function(nullBind, element, err) {
if(element === "BLOB") {
// ORA-06550: line 1, column 7:
// PLS-00306: wrong number or types of arguments in call to 'NODB_INBIND_XX'
// ORA-06550: line 1, column 7:
// PL/SQL: Statement ignored
(err.message).should.startWith('ORA-06550:');
} else {
if(nullBind === true) {
should.not.exist(err);
} else {
if(element.indexOf("CHAR") > -1 || element === "CLOB") {
should.not.exist(err);
}
if(element.indexOf("FLOAT") > -1 || element === "NUMBER" || element.indexOf("RAW") > -1) {
// FLOAT ORA-06502: PL/SQL: numeric or value error: character to number conversion error
// BINARY_FLOAT ORA-06502: PL/SQL: numeric or value error
// NUMBER: ORA-06502: PL/SQL: numeric or value error: character to number conversion error
// RAW: ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error
(err.message).should.startWith('ORA-06502:');
}
if(element === "BINARY_DOUBLE") {
// ORA-01847: ORA-06502: PL/SQL: numeric or value error
(err.message).should.startWith('ORA-06502:');
}
if(element === "DATE" || element === "TIMESTAMP") {
// ORA-01858: a non-numeric character was found where a numeric was expected
(err.message).should.startWith('ORA-01858:');
}
}
}
};
var compareErrMsgForRAW = function(element, err) {
if(element === "NUMBER" || element.indexOf("FLOAT") > -1 || element === "BINARY_DOUBLE" || element === "DATE" || element === "TIMESTAMP" || element === "CLOB") {
// ORA-06550: line 1, column 7:
// PLS-00306: wrong number or types of arguments in call to 'NODB_INBIND_XX'
// ORA-06550: line 1, column 7:
// PL/SQL: Statement ignored
(err.message).should.startWith('ORA-06550:');
}
if(element.indexOf("CHAR") > -1 || element.indexOf("RAW") > -1 || element === "BLOB") {
should.not.exist(err);
}
};
var tableNamePre = "table_93";
var procPre = "proc_93";
var index = 0;
describe('93.1 PLSQL procedure: bind in small value of oracledb.STRING/BUFFER', function() {
it('93.1.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.1.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
});
describe('93.2 PLSQL procedure: bind in null value of oracledb.STRING/BUFFER', function() {
it('93.2.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CHAR";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "DATE";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "RAW";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CLOB";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BLOB";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
it('93.2.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
var nullBind = true;
doTest(table_name, proc_name, dbColType, content, bindType, nullBind, done);
});
});
});

View File

@ -0,0 +1,723 @@
/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */
/******************************************************************************
*
* You may not use the identified files except in compliance with the Apache
* License, Version 2.0 (the "License.")
*
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*
* The node-oracledb test suite uses 'mocha', 'should' and 'async'.
* See LICENSE.md for relevant licenses.
*
* NAME
* 94. binding_procedureBindInout.js
*
* DESCRIPTION
* This suite tests the data binding, including:
* Test cases bind inout oracledb type STRING/BUFFER to all db column types using plsql procedure
* The cases take small/null bind values.
*
* NUMBERING RULE
* Test numbers follow this numbering rule:
* 1 - 20 are reserved for basic functional tests
* 21 - 50 are reserved for data type supporting tests
* 51 onwards are for other tests
*
*****************************************************************************/
'use strict';
var oracledb = require('oracledb');
var should = require('should');
var async = require('async');
var sql = require('./sql.js');
var dbConfig = require('./dbconfig.js');
var assist = require('./dataTypeAssist.js');
describe('94.binding_procedureBindInout.js', function() {
this.timeout(5000);
var connection = null;
var executeSql = function(sql, callback) {
connection.execute(
sql,
function(err) {
should.not.exist(err);
return callback();
}
);
};
before(function(done) {
oracledb.getConnection(dbConfig, function(err, conn) {
should.not.exist(err);
connection = conn;
done();
});
});
after(function(done) {
connection.release( function(err) {
should.not.exist(err);
done();
});
});
var doTest = function(table_name, procPre, bindType, dbColType, content, sequence, nullBind, callback) {
async.series([
function(cb) {
var bindVar = {
i: { val: sequence, type: oracledb.NUMBER, dir: oracledb.BIND_IN },
c: { val: content, type: bindType, dir: oracledb.BIND_INOUT, maxSize: 1000 }
};
inBind(table_name, procPre, dbColType, bindVar, bindType, nullBind, cb);
},
function(cb) {
var bindVar =[ sequence, { val: content, type: bindType, dir: oracledb.BIND_INOUT, maxSize: 1000 } ];
inBind(table_name, procPre, dbColType, bindVar, bindType, nullBind, cb);
}
], callback);
};
var inBind = function(table_name, proc_name, dbColType, bindVar, bindType, nullBind, callback) {
var createTable = sql.createTable(table_name, dbColType);
var drop_table = "DROP TABLE " + table_name + " PURGE";
var proc = "CREATE OR REPLACE PROCEDURE " + proc_name + " (ID IN NUMBER, inValue IN OUT " + dbColType + ")\n" +
"AS \n" +
"BEGIN \n" +
" insert into " + table_name + " ( id, content ) values (ID, inValue); \n" +
" select content into inValue from " + table_name + " where id = ID; \n" +
"END " + proc_name + "; ";
var sqlRun = "BEGIN " + proc_name + " (:i, :c); END;";
var proc_drop = "DROP PROCEDURE " + proc_name;
// console.log(proc);
async.series([
function(cb) {
executeSql(createTable, cb);
},
function(cb) {
executeSql(proc, cb);
},
function(cb) {
connection.execute(
sqlRun,
bindVar,
function(err) {
if(bindType === oracledb.STRING) {
compareErrMsgForString(nullBind, dbColType, err);
} else {
compareErrMsgForRAW(nullBind, dbColType, err);
}
cb();
}
);
},
function(cb) {
executeSql(proc_drop, cb);
},
function(cb) {
executeSql(drop_table, cb);
}
], callback);
};
var compareErrMsgForString = function(nullBind, element, err) {
if(element === "BLOB") {
// ORA-06550: line 1, column 7:
// PLS-00306: wrong number or types of arguments in call to 'NODB_INBIND_XX'
// ORA-06550: line 1, column 7:
// PL/SQL: Statement ignored
(err.message).should.startWith('ORA-06550:');
} else {
if(nullBind === true) {
should.not.exist(err);
} else {
if(element.indexOf("CHAR") > -1 || element === "CLOB") {
should.not.exist(err);
}
if(element.indexOf("FLOAT") > -1 || element === "NUMBER" || element.indexOf("RAW") > -1) {
// FLOAT ORA-06502: PL/SQL: numeric or value error: character to number conversion error
// BINARY_FLOAT ORA-06502: PL/SQL: numeric or value error
// NUMBER: ORA-06502: PL/SQL: numeric or value error: character to number conversion error
// RAW: ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error
(err.message).should.startWith('ORA-06502:');
}
if(element === "BINARY_DOUBLE") {
// ORA-01847: ORA-06502: PL/SQL: numeric or value error
(err.message).should.startWith('ORA-06502:');
}
if(element === "DATE" || element === "TIMESTAMP") {
// ORA-01858: a non-numeric character was found where a numeric was expected
(err.message).should.startWith('ORA-01858:');
}
}
}
};
var compareErrMsgForRAW = function(nullBind, element, err) {
if(element === "NUMBER" || element.indexOf("FLOAT") > -1 || element === "BINARY_DOUBLE" || element === "DATE" || element === "TIMESTAMP" || element === "CLOB") {
// ORA-06550: line 1, column 7:
// PLS-00306: wrong number or types of arguments in call to 'NODB_INBIND_XX'
// ORA-06550: line 1, column 7:
// PL/SQL: Statement ignored
(err.message).should.startWith('ORA-06550:');
}
if(element.indexOf("RAW") > -1 || element === "BLOB" || element === "VARCHAR2") {
should.not.exist(err);
}
if(element === "NCHAR" || element === "CHAR") {
if(nullBind === true) {
should.not.exist(err);
} else {
// ORA-06502: PL/SQL: numeric or value error: raw variable length too long
(err.message).should.startWith('ORA-06502:');
}
}
};
var tableNamePre = "table_94";
var procPre = "proc_94";
var index = 1;
describe('94.1 PLSQL procedure: bind inout small value of oracledb.STRING/BUFFER', function() {
it('94.1.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.1.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
});
describe('94.2 PLSQL procedure: bind inout null value of oracledb.STRING/BUFFER', function() {
it('94.2.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "DATE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "RAW";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('94.2.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
});
});

View File

@ -0,0 +1,738 @@
/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */
/******************************************************************************
*
* You may not use the identified files except in compliance with the Apache
* License, Version 2.0 (the "License.")
*
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*
* The node-oracledb test suite uses 'mocha', 'should' and 'async'.
* See LICENSE.md for relevant licenses.
*
* NAME
* 96. binding_procedureBindOut.js
*
* DESCRIPTION
* This suite tests the data binding, including:
* Test cases get oracledb type STRING/BUFFER from all db column types using plsql procedure
* The cases take small/null bind values.
*
* NUMBERING RULE
* Test numbers follow this numbering rule:
* 1 - 20 are reserved for basic functional tests
* 21 - 50 are reserved for data type supporting tests
* 51 onwards are for other tests
*
*****************************************************************************/
'use strict';
var oracledb = require('oracledb');
var should = require('should');
var async = require('async');
var sql = require('./sql.js');
var dbConfig = require('./dbconfig.js');
var assist = require('./dataTypeAssist.js');
describe('96.binding_procedureBindOut.js', function() {
this.timeout(5000);
var connection = null;
var executeSql = function(sql, callback) {
connection.execute(
sql,
function(err) {
should.not.exist(err);
return callback();
}
);
};
before(function(done) {
oracledb.getConnection(dbConfig, function(err, conn) {
should.not.exist(err);
connection = conn;
done();
});
});
after(function(done) {
connection.release( function(err) {
should.not.exist(err);
done();
});
});
var doTest = function(table_name, procName, bindType, dbColType, content, sequence, nullBind, callback) {
async.series([
function(cb) {
var bindVar = {
i: { val: sequence, type: oracledb.NUMBER, dir: oracledb.BIND_IN },
c: { val: content, type: bindType, dir: oracledb.BIND_OUT, maxSize: 1000 }
};
inBind(table_name, procName, sequence, dbColType, bindVar, bindType, nullBind, cb);
},
function(cb) {
var bindVar =[ sequence, { val: content, type: bindType, dir: oracledb.BIND_OUT, maxSize: 1000 } ];
inBind(table_name, procName, sequence, dbColType, bindVar, bindType, nullBind, cb);
}
], callback);
};
var getInsertVal = function(element, nullBind) {
var insertValue = [];
if(element.indexOf("CHAR") > -1 || element === "CLOB") {
insertValue[0] = (nullBind===true) ? null : "abcsca";
insertValue[1] = oracledb.STRING;
}
if(element === "BINARY_DOUBLE" || element.indexOf("FLOAT") > -1 || element === "NUMBER") {
insertValue[0] = (nullBind===true) ? null : 1;
insertValue[1] = oracledb.NUMBER;
}
if(element === "TIMESTAMP" || element === "DATE") {
insertValue[0] = (nullBind===true) ? null : new Date(0);
insertValue[1] = oracledb.DATE;
}
if(element === "BLOB" || element.indexOf("RAW") > -1 ) {
insertValue[0] = (nullBind===true) ? null : assist.createBuffer(100);
insertValue[1] = oracledb.BUFFER;
}
return insertValue;
};
var inBind = function(table_name, proc_name, sequence, dbColType, bindVar, bindType, nullBind, callback) {
var createTable = sql.createTable(table_name, dbColType);
var drop_table = "DROP TABLE " + table_name + " PURGE";
var proc = "CREATE OR REPLACE PROCEDURE " + proc_name + " (ID IN NUMBER, inValue OUT " + dbColType + ")\n" +
"AS \n" +
"BEGIN \n" +
" select content into inValue from " + table_name + " where id = ID; \n" +
"END " + proc_name + "; ";
var sqlRun = "BEGIN " + proc_name + " (:i, :c); END;";
var proc_drop = "DROP PROCEDURE " + proc_name;
// console.log(proc);
var inserted = getInsertVal(dbColType, nullBind);
var insertSql = "insert into " + table_name + " (id, content) values (:c1, :c2)";
async.series([
function(cb) {
executeSql(createTable, cb);
},
function(cb) {
var bind = {
c1: { val: sequence, type: oracledb.NUMBER, dir: oracledb.BIND_IN },
c2: { val: inserted[0], type: inserted[1], dir: oracledb.BIND_IN }
};
connection.execute(
insertSql,
bind,
function(err, result) {
should.not.exist(err);
should.strictEqual(result.rowsAffected, 1);
cb();
});
},
function(cb) {
executeSql(proc, cb);
},
function(cb) {
connection.execute(
sqlRun,
bindVar,
function(err) {
if(bindType === oracledb.STRING) {
compareErrMsgForString(dbColType, err);
} else {
compareErrMsgForRAW(nullBind, dbColType, err);
}
cb();
}
);
},
function(cb) {
executeSql(proc_drop, cb);
},
function(cb) {
executeSql(drop_table, cb);
}
], callback);
};
var compareErrMsgForString = function(element, err) {
if(element === "BLOB") {
// ORA-06550: line 1, column 7:
// PLS-00306: wrong number or types of arguments in call to 'NODB_INBIND_XX'
// ORA-06550: line 1, column 7:
// PL/SQL: Statement ignored
(err.message).should.startWith('ORA-06550:');
} else {
should.not.exist(err);
}
};
var compareErrMsgForRAW = function(nullBind, element, err) {
if(element === "NUMBER" || element.indexOf("FLOAT") > -1 || element === "BINARY_DOUBLE" || element === "DATE" || element === "TIMESTAMP" || element === "CLOB") {
// ORA-06550: line 1, column 7:
// PLS-00306: wrong number or types of arguments in call to 'NODB_INBIND_XX'
// ORA-06550: line 1, column 7:
// PL/SQL: Statement ignored
(err.message).should.startWith('ORA-06550:');
}
if(element.indexOf("RAW") > -1 || element === "BLOB") {
should.not.exist(err);
}
if(element.indexOf("CHAR") > -1) {
if(nullBind===true) {
should.not.exist(err);
} else {
// ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error
(err.message).should.startWith('ORA-06502:');
}
}
};
var tableNamePre = "table_95";
var procPre = "proc_95";
var index = 1;
describe('96.1 PLSQL procedure: bind out small value to oracledb.STRING/BUFFER', function() {
it('96.1.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = "small string";
var bindType = oracledb.STRING;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.1.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = assist.createBuffer(100);
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
var nullBind = false;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
});
describe('96.2 PLSQL procedure: bind out null value to oracledb.STRING/BUFFER', function() {
it('96.2.1 oracledb.STRING <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NUMBER";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.2 oracledb.STRING <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.3 oracledb.STRING <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "NCHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.4 oracledb.STRING <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "VARCHAR2";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.5 oracledb.STRING <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.6 oracledb.STRING <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BINARY_DOUBLE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.8 oracledb.STRING <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "DATE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.9 oracledb.STRING <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "TIMESTAMP";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.10 oracledb.STRING <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "RAW";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.11 oracledb.STRING <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "CLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.12 oracledb.STRING <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.STRING;
var dbColType = "BLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.13 oracledb.BUFFER <--> DB: NUMBER', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NUMBER";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.14 oracledb.BUFFER <--> DB: CHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.15 oracledb.BUFFER <--> DB: NCHAR', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "NCHAR";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.16 oracledb.BUFFER <--> DB: VARCHAR2', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "VARCHAR2";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.17 oracledb.BUFFER <--> DB: FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_FLOAT";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BINARY_DOUBLE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.20 oracledb.BUFFER <--> DB: DATE', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "DATE";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.21 oracledb.BUFFER <--> DB: TIMESTAMP', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "TIMESTAMP";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.22 oracledb.BUFFER <--> DB: RAW', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "RAW";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.23 oracledb.BUFFER <--> DB: CLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "CLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
it('96.2.24 oracledb.BUFFER <--> DB: BLOB', function(done) {
index++;
var table_name = tableNamePre + index;
var proc_name = procPre + index;
var content = null;
var bindType = oracledb.BUFFER;
var dbColType = "BLOB";
var nullBind = true;
doTest(table_name, proc_name, bindType, dbColType, content, index, nullBind, done);
});
});
});

View File

@ -144,7 +144,7 @@ describe('91. fetchBlobAsBuffer4.js', function() {
done();
}); // afterEach
it.skip('91.1.1 bind by position - 1', function(done) {
it('91.1.1 bind by position - 1', function(done) {
var proc = "CREATE OR REPLACE FUNCTION nodb_blobs_out_94 (ID_1 IN NUMBER, ID_2 IN NUMBER, C IN RAW) RETURN BLOB \n" +
"IS \n" +
" tmpLOB4 BLOB; \n" +
@ -152,7 +152,7 @@ describe('91. fetchBlobAsBuffer4.js', function() {
" select blob into tmpLOB4 from nodb_blob_1 where num_1 = ID_1;\n" +
" RETURN tmpLOB4; \n" +
"END;";
var sqlRun = "begin :output := nodb_blobs_out_94 (:i1, :i2); end;";
var sqlRun = "begin :output := nodb_blobs_out_94 (:i1, :i2, :i3); end;";
var proc_drop = "DROP FUNCTION nodb_blobs_out_94";
var len = 400;
@ -178,11 +178,11 @@ describe('91. fetchBlobAsBuffer4.js', function() {
function(cb) {
connection.execute(
sqlRun,
[ sequence, null, content, { type: oracledb.BLOB, dir: oracledb.BIND_OUT } ],
[ { type: oracledb.BUFFER, dir: oracledb.BIND_OUT, maxSize: len }, sequence, null, content ],
function(err, result) {
should.not.exist(err);
var resultVal = result.outBinds.output;
var compareBuffer = assist.compare2Buffers(resultVal, content);
var resultVal = result.outBinds[0];
var compareBuffer = assist.compare2Buffers(content, resultVal);
should.strictEqual(compareBuffer, true);
cb();
}
@ -249,7 +249,7 @@ describe('91. fetchBlobAsBuffer4.js', function() {
], done);
}); // 91.1.2
it.skip('91.1.3 bind by position - 2', function(done) {
it('91.1.3 bind by position - 2', function(done) {
var proc = "CREATE OR REPLACE FUNCTION nodb_blobs_out_94 (ID_1 IN NUMBER, ID_2 IN NUMBER, C IN RAW) RETURN BLOB \n" +
"IS \n" +
" tmpLOB4 BLOB; \n" +
@ -257,7 +257,7 @@ describe('91. fetchBlobAsBuffer4.js', function() {
" select blob into tmpLOB4 from nodb_blob_1 where num_1 = ID_1;\n" +
" RETURN tmpLOB4; \n" +
"END;";
var sqlRun = "begin :output := nodb_blobs_out_94 (:i1, :i2); end;";
var sqlRun = "begin :output := nodb_blobs_out_94 (:i1, :i2, :c); end;";
var proc_drop = "DROP FUNCTION nodb_blobs_out_94";
var len = 400;
@ -283,10 +283,10 @@ describe('91. fetchBlobAsBuffer4.js', function() {
function(cb) {
connection.execute(
sqlRun,
[ sequence, sequence, null, { type: oracledb.BLOB, dir: oracledb.BIND_OUT } ],
[ { type: oracledb.BUFFER, dir: oracledb.BIND_OUT, maxSize: len }, sequence, sequence, null ],
function(err, result) {
should.not.exist(err);
var resultVal = result.outBinds.output;
var resultVal = result.outBinds[0];
var compareBuffer = assist.compare2Buffers(resultVal, content);
should.strictEqual(compareBuffer, true);
cb();
@ -375,7 +375,7 @@ describe('91. fetchBlobAsBuffer4.js', function() {
done();
}); // afterEach
it.skip('91.2.1 bind by position - 1', function(done) {
it('91.2.1 bind by position - 1', function(done) {
var len = 500;
var sequence = insertID++;
var specialStr = "91.2.1";
@ -399,10 +399,10 @@ describe('91. fetchBlobAsBuffer4.js', function() {
function(cb) {
connection.execute(
sqlRun,
[ sequence, null, content, { type: oracledb.BLOB, dir: oracledb.BIND_OUT } ],
[ sequence, null, content, { type: oracledb.BUFFER, dir: oracledb.BIND_OUT, maxSize: len } ],
function(err, result) {
should.not.exist(err);
var resultVal = result.outBinds.c2;
var resultVal = result.outBinds[0];
var compareBuffer = assist.compare2Buffers(resultVal, content);
should.strictEqual(compareBuffer, true);
cb();
@ -460,7 +460,7 @@ describe('91. fetchBlobAsBuffer4.js', function() {
], done);
}); // 91.2.2
it.skip('91.2.3 bind by position - 2', function(done) {
it('91.2.3 bind by position - 2', function(done) {
var len = 500;
var sequence = insertID++;
var specialStr = "91.2.3";
@ -484,10 +484,10 @@ describe('91. fetchBlobAsBuffer4.js', function() {
function(cb) {
connection.execute(
sqlRun,
[ sequence, sequence, null, { type: oracledb.BLOB, dir: oracledb.BIND_OUT } ],
[ sequence, sequence, null, { type: oracledb.BUFFER, dir: oracledb.BIND_OUT, maxSize: len } ],
function(err, result) {
should.not.exist(err);
var resultVal = result.outBinds.c2;
var resultVal = result.outBinds[0];
var compareBuffer = assist.compare2Buffers(resultVal, content);
should.strictEqual(compareBuffer, true);
cb();
@ -615,7 +615,7 @@ describe('91. fetchBlobAsBuffer4.js', function() {
], done);
}); // 91.3.1
it.skip('91.3.2 bind by position - 1', function(done) {
it('91.3.2 bind by position - 1', function(done) {
var len = 1000;
var sequence = insertID++;
var specialStr = "91.3.2";
@ -637,11 +637,11 @@ describe('91. fetchBlobAsBuffer4.js', function() {
connection.execute(
sqlRun,
[
sequence, null, content, { type: oracledb.BUFFER, dir: oracledb.BIND_OUT, maxSize: len }
{ type: oracledb.BUFFER, dir: oracledb.BIND_OUT, maxSize: len }, sequence, null, content
],
function(err, result) {
should.not.exist(err);
var resultVal = result.outBinds.output;
var resultVal = result.outBinds[0];
var compareBuffer = assist.compare2Buffers(resultVal, content);
should.strictEqual(compareBuffer, true);
cb();
@ -690,7 +690,7 @@ describe('91. fetchBlobAsBuffer4.js', function() {
], done);
}); // 91.3.3
it.skip('91.3.4 bind by position - 2', function(done) {
it('91.3.4 bind by position - 2', function(done) {
var len = 1000;
var sequence = insertID++;
var specialStr = "91.3.4";
@ -712,11 +712,11 @@ describe('91. fetchBlobAsBuffer4.js', function() {
connection.execute(
sqlRun,
[
sequence, sequence, null, { type: oracledb.BUFFER, dir: oracledb.BIND_OUT, maxSize: len }
{ type: oracledb.BUFFER, dir: oracledb.BIND_OUT, maxSize: len }, sequence, sequence, null
],
function(err, result) {
should.not.exist(err);
var resultVal = result.outBinds.output;
var resultVal = result.outBinds[0];
var compareBuffer = assist.compare2Buffers(resultVal, content);
should.strictEqual(compareBuffer, true);
cb();

View File

@ -165,7 +165,7 @@ describe('90. fetchClobAsString4.js', function() {
done();
}); // afterEach
it.skip('90.1.1 bind by position - 1', function(done) {
it('90.1.1 bind by position - 1', function(done) {
var len = 400;
var sequence = insertID++;
var specialStr = "90.1.1";
@ -185,10 +185,10 @@ describe('90. fetchClobAsString4.js', function() {
function(cb) {
connection.execute(
sqlRun,
[ sequence, null, clobStr, { type: oracledb.CLOB, dir: oracledb.BIND_OUT } ],
[ { type: oracledb.STRING, dir: oracledb.BIND_OUT, maxSize: len }, sequence, null, clobStr],
function(err, result) {
should.not.exist(err);
var resultVal = result.outBinds.output;
var resultVal = result.outBinds[0];
verifyResult(resultVal, specialStr, clobStr);
cb();
}
@ -234,7 +234,7 @@ describe('90. fetchClobAsString4.js', function() {
], done);
}); // 90.1.2
it.skip('90.1.3 bind by position - 2', function(done) {
it('90.1.3 bind by position - 2', function(done) {
var len = 400;
var sequence = insertID++;
var specialStr = "90.1.2";
@ -254,10 +254,10 @@ describe('90. fetchClobAsString4.js', function() {
function(cb) {
connection.execute(
sqlRun,
[ sequence, sequence, null, { type: oracledb.CLOB, dir: oracledb.BIND_OUT } ],
[ { type: oracledb.STRING, dir: oracledb.BIND_OUT, maxSize: len }, sequence, sequence, null ],
function(err, result) {
should.not.exist(err);
var resultVal = result.outBinds.output;
var resultVal = result.outBinds[0];
verifyResult(resultVal, specialStr, clobStr);
cb();
}
@ -332,7 +332,7 @@ describe('90. fetchClobAsString4.js', function() {
done();
}); // afterEach
it.skip('90.2.1 bind by position - 1', function(done) {
it('90.2.1 bind by position - 1', function(done) {
var len = 500;
var sequence = insertID++;
var specialStr = "90.2.1";
@ -352,10 +352,10 @@ describe('90. fetchClobAsString4.js', function() {
function(cb) {
connection.execute(
sqlRun,
[ sequence, null, clobStr, { type: oracledb.CLOB, dir: oracledb.BIND_OUT } ],
[ sequence, null, { val: clobStr, type: oracledb.STRING, dir: oracledb.BIND_IN }, { type: oracledb.STRING, dir: oracledb.BIND_OUT, maxSize: len } ],
function(err, result) {
should.not.exist(err);
var resultVal = result.outBinds.c2;
var resultVal = result.outBinds[0];
verifyResult(resultVal, specialStr, clobStr);
cb();
}
@ -401,7 +401,7 @@ describe('90. fetchClobAsString4.js', function() {
], done);
}); // 90.2.2
it.skip('90.2.3 bind by position - 2', function(done) {
it('90.2.3 bind by position - 2', function(done) {
var len = 500;
var sequence = insertID++;
var specialStr = "90.2.3";
@ -421,10 +421,10 @@ describe('90. fetchClobAsString4.js', function() {
function(cb) {
connection.execute(
sqlRun,
[ sequence, sequence, null, { type: oracledb.CLOB, dir: oracledb.BIND_OUT } ],
[ sequence, sequence, null, { type: oracledb.STRING, dir: oracledb.BIND_OUT, maxSize: len } ],
function(err, result) {
should.not.exist(err);
var resultVal = result.outBinds.c2;
var resultVal = result.outBinds[0];
verifyResult(resultVal, specialStr, clobStr);
cb();
}
@ -538,7 +538,7 @@ describe('90. fetchClobAsString4.js', function() {
], done);
}); // 90.3.1
it.skip('90.3.2 bind by position - 1', function(done) {
it('90.3.2 bind by position - 1', function(done) {
var len = 1000;
var sequence = insertID++;
var specialStr = "90.3.1";
@ -558,10 +558,10 @@ describe('90. fetchClobAsString4.js', function() {
function(cb) {
connection.execute(
sqlRun,
[ sequence, null, clobStr, { type: oracledb.CLOB, dir: oracledb.BIND_OUT } ],
[ { type: oracledb.STRING, dir: oracledb.BIND_OUT, maxSize: len }, sequence, null, clobStr ],
function(err, result) {
should.not.exist(err);
var resultVal = result.outBinds.output;
var resultVal = result.outBinds[0];
verifyResult(resultVal, specialStr, clobStr);
cb();
}
@ -607,7 +607,7 @@ describe('90. fetchClobAsString4.js', function() {
], done);
}); // 90.3.3
it.skip('90.3.4 bind by position - 2', function(done) {
it('90.3.4 bind by position - 2', function(done) {
var len = 1000;
var sequence = insertID++;
var specialStr = "90.3.4";
@ -627,10 +627,10 @@ describe('90. fetchClobAsString4.js', function() {
function(cb) {
connection.execute(
sqlRun,
[ sequence, sequence, null, { type: oracledb.CLOB, dir: oracledb.BIND_OUT } ],
[ { type: oracledb.STRING, dir: oracledb.BIND_OUT, maxSize: len }, sequence, sequence, null ],
function(err, result) {
should.not.exist(err);
var resultVal = result.outBinds.output;
var resultVal = result.outBinds[0];
verifyResult(resultVal, specialStr, clobStr);
cb();
}

View File

@ -262,6 +262,11 @@ Overview of node-oracledb functional tests
12.7 Testing maxRows
12.7.1 maxRows option is ignored when resultSet option is true
12.7.2 maxRows option is ignored with REF Cursor
12.8 Testing errInvalidResultSet
12.8.1 Negative: UPDATE BIND out with oracledb.CURSOR - bind by name
12.8.2 Negative: UPDATE BIND out with oracledb.CURSOR - bind by position
12.8.3 Negative: INSERT BIND out with oracledb.CURSOR - bind by name
12.8.4 Negative: INSERT BIND out with oracledb.CURSOR - bind by position
13. stream1.js
13.1 Testing QueryStream
@ -1927,34 +1932,579 @@ Overview of node-oracledb functional tests
90. fetchClobAsString4.js
90.1 PLSQL FUNCTION RETURN CLOB to STRING
- 90.1.1 bind by position - 1
90.1.1 bind by position - 1
90.1.2 bind by name - 1
- 90.1.3 bind by position - 2
90.1.3 bind by position - 2
90.1.4 bind by name - 2
90.2 PLSQL PROCEDURE BIND OUT CLOB to STRING
- 90.2.1 bind by position - 1
90.2.1 bind by position - 1
90.2.2 bind by name - 1
- 90.2.3 bind by position - 2
90.2.3 bind by position - 2
90.2.4 bind by name - 2
90.3 PLSQL FUNCTION RETURN CLOB to VARCHAR2
90.3.1 bind by name - 1
- 90.3.2 bind by position - 1
90.3.2 bind by position - 1
90.3.3 bind by name - 2
- 90.3.4 bind by position - 2
90.3.4 bind by position - 2
91. fetchBlobAsBuffer4.js
91.1 PLSQL FUNCTION RETURN BLOB to BUFFER
- 91.1.1 bind by position - 1
91.1.1 bind by position - 1
91.1.2 bind by name - 1
- 91.1.3 bind by position - 2
91.1.3 bind by position - 2
91.1.4 bind by name - 2
91.2 PLSQL PROCEDURE BIND OUT BLOB to BUFFER
- 91.2.1 bind by position - 1
91.2.1 bind by position - 1
91.2.2 bind by name - 1
- 91.2.3 bind by position - 2
91.2.3 bind by position - 2
91.2.4 bind by name - 2
91.3 PLSQL FUNCTION RETURN BLOB to RAW
91.3.1 bind by name - 1
- 91.3.2 bind by position - 1
91.3.2 bind by position - 1
91.3.3 bind by name - 2
- 91.3.4 bind by position - 2
91.3.4 bind by position - 2
92.binding_DMLInsert.js
92.1 insert small value of oracledb.STRING/BUFFER
92.1.1 oracledb.STRING <--> DB: NUMBER
92.1.2 oracledb.STRING <--> DB: CHAR
92.1.3 oracledb.STRING <--> DB: NCHAR
92.1.4 oracledb.STRING <--> DB: VARCHAR2
92.1.5 oracledb.STRING <--> DB: FLOAT
92.1.6 oracledb.STRING <--> DB: BINARY_FLOAT
92.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE
92.1.8 oracledb.STRING <--> DB: DATE
92.1.9 oracledb.STRING <--> DB: TIMESTAMP
92.1.10 oracledb.STRING <--> DB: RAW
92.1.11 oracledb.STRING <--> DB: CLOB
92.1.12 oracledb.STRING <--> DB: BLOB
92.1.13 oracledb.BUFFER <--> DB: NUMBER
92.1.14 oracledb.BUFFER <--> DB: CHAR
92.1.15 oracledb.BUFFER <--> DB: NCHAR
92.1.16 oracledb.BUFFER <--> DB: VARCHAR2
92.1.17 oracledb.BUFFER <--> DB: FLOAT
92.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
92.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
92.1.20 oracledb.BUFFER <--> DB: DATE
92.1.21 oracledb.BUFFER <--> DB: TIMESTAMP
92.1.22 oracledb.BUFFER <--> DB: RAW
92.1.23 oracledb.BUFFER <--> DB: CLOB
92.1.24 oracledb.BUFFER <--> DB: BLOB
92.2 insert null value of oracledb.STRING/BUFFER
92.2.1 oracledb.STRING <--> DB: NUMBER
92.2.2 oracledb.STRING <--> DB: CHAR
92.2.3 oracledb.STRING <--> DB: NCHAR
92.2.4 oracledb.STRING <--> DB: VARCHAR2
92.2.5 oracledb.STRING <--> DB: FLOAT
92.2.6 oracledb.STRING <--> DB: BINARY_FLOAT
92.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE
92.2.8 oracledb.STRING <--> DB: DATE
92.2.9 oracledb.STRING <--> DB: TIMESTAMP
92.2.10 oracledb.STRING <--> DB: RAW
92.2.11 oracledb.STRING <--> DB: CLOB
92.2.12 oracledb.STRING <--> DB: BLOB
92.2.13 oracledb.BUFFER <--> DB: NUMBER
92.2.14 oracledb.BUFFER <--> DB: CHAR
92.2.15 oracledb.BUFFER <--> DB: NCHAR
92.2.16 oracledb.BUFFER <--> DB: VARCHAR2
92.2.17 oracledb.BUFFER <--> DB: FLOAT
92.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
92.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
92.2.20 oracledb.BUFFER <--> DB: DATE
92.2.21 oracledb.BUFFER <--> DB: TIMESTAMP
92.2.22 oracledb.BUFFER <--> DB: RAW
92.2.23 oracledb.BUFFER <--> DB: CLOB
92.2.24 oracledb.BUFFER <--> DB: BLOB
92.3 insert large value of oracledb.STRING/BUFFER
92.3.1 oracledb.STRING <--> DB: NUMBER
92.3.2 oracledb.STRING <--> DB: CHAR
92.3.3 oracledb.STRING <--> DB: NCHAR
92.3.4 oracledb.STRING <--> DB: VARCHAR2
92.3.5 oracledb.STRING <--> DB: FLOAT
92.3.6 oracledb.STRING <--> DB: BINARY_FLOAT
92.3.7 oracledb.STRING <--> DB: BINARY_DOUBLE
92.3.8 oracledb.STRING <--> DB: DATE
92.3.9 oracledb.STRING <--> DB: TIMESTAMP
92.3.10 oracledb.STRING <--> DB: RAW
92.3.11 oracledb.STRING <--> DB: CLOB
92.3.12 oracledb.STRING <--> DB: BLOB
92.3.13 oracledb.BUFFER <--> DB: NUMBER
92.3.14 oracledb.BUFFER <--> DB: CHAR
92.3.15 oracledb.BUFFER <--> DB: NCHAR
92.3.16 oracledb.BUFFER <--> DB: VARCHAR2
92.3.17 oracledb.BUFFER <--> DB: FLOAT
92.3.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
92.3.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
92.3.20 oracledb.BUFFER <--> DB: DATE
92.3.21 oracledb.BUFFER <--> DB: TIMESTAMP
92.3.22 oracledb.BUFFER <--> DB: RAW
92.3.23 oracledb.BUFFER <--> DB: CLOB
92.3.24 oracledb.BUFFER <--> DB: BLOB
93.binding_procedureBindIn.js
93.1 PLSQL procedure: bind in small value of oracledb.STRING/BUFFER
93.1.1 oracledb.STRING <--> DB: NUMBER
93.1.2 oracledb.STRING <--> DB: CHAR
93.1.3 oracledb.STRING <--> DB: NCHAR
93.1.4 oracledb.STRING <--> DB: VARCHAR2
93.1.5 oracledb.STRING <--> DB: FLOAT
93.1.6 oracledb.STRING <--> DB: BINARY_FLOAT
93.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE
93.1.8 oracledb.STRING <--> DB: DATE
93.1.9 oracledb.STRING <--> DB: TIMESTAMP
93.1.10 oracledb.STRING <--> DB: RAW
93.1.11 oracledb.STRING <--> DB: CLOB
93.1.12 oracledb.STRING <--> DB: BLOB
93.1.13 oracledb.BUFFER <--> DB: NUMBER
93.1.14 oracledb.BUFFER <--> DB: CHAR
93.1.15 oracledb.BUFFER <--> DB: NCHAR
93.1.16 oracledb.BUFFER <--> DB: VARCHAR2
93.1.17 oracledb.BUFFER <--> DB: FLOAT
93.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
93.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
93.1.20 oracledb.BUFFER <--> DB: DATE
93.1.21 oracledb.BUFFER <--> DB: TIMESTAMP
93.1.22 oracledb.BUFFER <--> DB: RAW
93.1.23 oracledb.BUFFER <--> DB: CLOB
93.1.24 oracledb.BUFFER <--> DB: BLOB
93.2 PLSQL procedure: bind in null value of oracledb.STRING/BUFFER
93.2.1 oracledb.STRING <--> DB: NUMBER
93.2.2 oracledb.STRING <--> DB: CHAR
93.2.3 oracledb.STRING <--> DB: NCHAR
93.2.4 oracledb.STRING <--> DB: VARCHAR2
93.2.5 oracledb.STRING <--> DB: FLOAT
93.2.6 oracledb.STRING <--> DB: BINARY_FLOAT
93.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE
93.2.8 oracledb.STRING <--> DB: DATE
93.2.9 oracledb.STRING <--> DB: TIMESTAMP
93.2.10 oracledb.STRING <--> DB: RAW
93.2.11 oracledb.STRING <--> DB: CLOB
93.2.12 oracledb.STRING <--> DB: BLOB
93.2.13 oracledb.BUFFER <--> DB: NUMBER
93.2.14 oracledb.BUFFER <--> DB: CHAR
93.2.15 oracledb.BUFFER <--> DB: NCHAR
93.2.16 oracledb.BUFFER <--> DB: VARCHAR2
93.2.17 oracledb.BUFFER <--> DB: FLOAT
93.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
93.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
93.2.20 oracledb.BUFFER <--> DB: DATE
93.2.21 oracledb.BUFFER <--> DB: TIMESTAMP
93.2.22 oracledb.BUFFER <--> DB: RAW
93.2.23 oracledb.BUFFER <--> DB: CLOB
93.2.24 oracledb.BUFFER <--> DB: BLOB
94.binding_procedureBindInout.js
94.1 PLSQL procedure: bind inout small value of oracledb.STRING/BUFFER
94.1.1 oracledb.STRING <--> DB: NUMBER
94.1.2 oracledb.STRING <--> DB: CHAR
94.1.3 oracledb.STRING <--> DB: NCHAR
94.1.4 oracledb.STRING <--> DB: VARCHAR2
94.1.5 oracledb.STRING <--> DB: FLOAT
94.1.6 oracledb.STRING <--> DB: BINARY_FLOAT
94.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE
94.1.8 oracledb.STRING <--> DB: DATE
94.1.9 oracledb.STRING <--> DB: TIMESTAMP
94.1.10 oracledb.STRING <--> DB: RAW
94.1.11 oracledb.STRING <--> DB: CLOB
94.1.12 oracledb.STRING <--> DB: BLOB
94.1.13 oracledb.BUFFER <--> DB: NUMBER
94.1.14 oracledb.BUFFER <--> DB: CHAR
94.1.15 oracledb.BUFFER <--> DB: NCHAR
94.1.16 oracledb.BUFFER <--> DB: VARCHAR2
94.1.17 oracledb.BUFFER <--> DB: FLOAT
94.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
94.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
94.1.20 oracledb.BUFFER <--> DB: DATE
94.1.21 oracledb.BUFFER <--> DB: TIMESTAMP
94.1.22 oracledb.BUFFER <--> DB: RAW
94.1.23 oracledb.BUFFER <--> DB: CLOB
94.1.24 oracledb.BUFFER <--> DB: BLOB
94.2 PLSQL procedure: bind inout null value of oracledb.STRING/BUFFER
94.2.1 oracledb.STRING <--> DB: NUMBER
94.2.2 oracledb.STRING <--> DB: CHAR
94.2.3 oracledb.STRING <--> DB: NCHAR
94.2.4 oracledb.STRING <--> DB: VARCHAR2
94.2.5 oracledb.STRING <--> DB: FLOAT
94.2.6 oracledb.STRING <--> DB: BINARY_FLOAT
94.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE
94.2.8 oracledb.STRING <--> DB: DATE
94.2.9 oracledb.STRING <--> DB: TIMESTAMP
94.2.10 oracledb.STRING <--> DB: RAW
94.2.11 oracledb.STRING <--> DB: CLOB
94.2.12 oracledb.STRING <--> DB: BLOB
94.2.13 oracledb.BUFFER <--> DB: NUMBER
94.2.14 oracledb.BUFFER <--> DB: CHAR
94.2.15 oracledb.BUFFER <--> DB: NCHAR
94.2.16 oracledb.BUFFER <--> DB: VARCHAR2
94.2.17 oracledb.BUFFER <--> DB: FLOAT
94.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
94.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
94.2.20 oracledb.BUFFER <--> DB: DATE
94.2.21 oracledb.BUFFER <--> DB: TIMESTAMP
94.2.22 oracledb.BUFFER <--> DB: RAW
94.2.23 oracledb.BUFFER <--> DB: CLOB
94.2.24 oracledb.BUFFER <--> DB: BLOB
95.binding_functionBindInout.js
95.1 PLSQL function: bind inout small value of oracledb.STRING/BUFFER
95.1.1 oracledb.STRING <--> DB: NUMBER
95.1.2 oracledb.STRING <--> DB: CHAR
95.1.3 oracledb.STRING <--> DB: NCHAR
95.1.4 oracledb.STRING <--> DB: VARCHAR2
95.1.5 oracledb.STRING <--> DB: FLOAT
95.1.6 oracledb.STRING <--> DB: BINARY_FLOAT
95.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE
95.1.8 oracledb.STRING <--> DB: DATE
95.1.9 oracledb.STRING <--> DB: TIMESTAMP
95.1.10 oracledb.STRING <--> DB: RAW
95.1.11 oracledb.STRING <--> DB: CLOB
95.1.12 oracledb.STRING <--> DB: BLOB
95.1.13 oracledb.BUFFER <--> DB: NUMBER
95.1.14 oracledb.BUFFER <--> DB: CHAR
95.1.15 oracledb.BUFFER <--> DB: NCHAR
95.1.16 oracledb.BUFFER <--> DB: VARCHAR2
95.1.17 oracledb.BUFFER <--> DB: FLOAT
95.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
95.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
95.1.20 oracledb.BUFFER <--> DB: DATE
95.1.21 oracledb.BUFFER <--> DB: TIMESTAMP
95.1.22 oracledb.BUFFER <--> DB: RAW
95.1.23 oracledb.BUFFER <--> DB: CLOB
95.1.24 oracledb.BUFFER <--> DB: BLOB
95.2 PLSQL function: bind inout null value of oracledb.STRING/BUFFER
95.2.1 oracledb.STRING <--> DB: NUMBER
95.2.2 oracledb.STRING <--> DB: CHAR
95.2.3 oracledb.STRING <--> DB: NCHAR
95.2.4 oracledb.STRING <--> DB: VARCHAR2
95.2.5 oracledb.STRING <--> DB: FLOAT
95.2.6 oracledb.STRING <--> DB: BINARY_FLOAT
95.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE
95.2.8 oracledb.STRING <--> DB: DATE
95.2.9 oracledb.STRING <--> DB: TIMESTAMP
95.2.10 oracledb.STRING <--> DB: RAW
95.2.11 oracledb.STRING <--> DB: CLOB
95.2.12 oracledb.STRING <--> DB: BLOB
95.2.13 oracledb.BUFFER <--> DB: NUMBER
95.2.14 oracledb.BUFFER <--> DB: CHAR
95.2.15 oracledb.BUFFER <--> DB: NCHAR
95.2.16 oracledb.BUFFER <--> DB: VARCHAR2
95.2.17 oracledb.BUFFER <--> DB: FLOAT
95.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
95.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
95.2.20 oracledb.BUFFER <--> DB: DATE
95.2.21 oracledb.BUFFER <--> DB: TIMESTAMP
95.2.22 oracledb.BUFFER <--> DB: RAW
95.2.23 oracledb.BUFFER <--> DB: CLOB
95.2.24 oracledb.BUFFER <--> DB: BLOB
96.binding_procedureBindOut.js
96.1 PLSQL procedure: bind out small value to oracledb.STRING/BUFFER
96.1.1 oracledb.STRING <--> DB: NUMBER
96.1.2 oracledb.STRING <--> DB: CHAR
96.1.3 oracledb.STRING <--> DB: NCHAR
96.1.4 oracledb.STRING <--> DB: VARCHAR2
96.1.5 oracledb.STRING <--> DB: FLOAT
96.1.6 oracledb.STRING <--> DB: BINARY_FLOAT
96.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE
96.1.8 oracledb.STRING <--> DB: DATE
96.1.9 oracledb.STRING <--> DB: TIMESTAMP
96.1.10 oracledb.STRING <--> DB: RAW
96.1.11 oracledb.STRING <--> DB: CLOB
96.1.12 oracledb.STRING <--> DB: BLOB
96.1.13 oracledb.BUFFER <--> DB: NUMBER
96.1.14 oracledb.BUFFER <--> DB: CHAR
96.1.15 oracledb.BUFFER <--> DB: NCHAR
96.1.16 oracledb.BUFFER <--> DB: VARCHAR2
96.1.17 oracledb.BUFFER <--> DB: FLOAT
96.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
96.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
96.1.20 oracledb.BUFFER <--> DB: DATE
96.1.21 oracledb.BUFFER <--> DB: TIMESTAMP
96.1.22 oracledb.BUFFER <--> DB: RAW
96.1.23 oracledb.BUFFER <--> DB: CLOB
96.1.24 oracledb.BUFFER <--> DB: BLOB
96.2 PLSQL procedure: bind out null value to oracledb.STRING/BUFFER
96.2.1 oracledb.STRING <--> DB: NUMBER
96.2.2 oracledb.STRING <--> DB: CHAR
96.2.3 oracledb.STRING <--> DB: NCHAR
96.2.4 oracledb.STRING <--> DB: VARCHAR2
96.2.5 oracledb.STRING <--> DB: FLOAT
96.2.6 oracledb.STRING <--> DB: BINARY_FLOAT
96.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE
96.2.8 oracledb.STRING <--> DB: DATE
96.2.9 oracledb.STRING <--> DB: TIMESTAMP
96.2.10 oracledb.STRING <--> DB: RAW
96.2.11 oracledb.STRING <--> DB: CLOB
96.2.12 oracledb.STRING <--> DB: BLOB
96.2.13 oracledb.BUFFER <--> DB: NUMBER
96.2.14 oracledb.BUFFER <--> DB: CHAR
96.2.15 oracledb.BUFFER <--> DB: NCHAR
96.2.16 oracledb.BUFFER <--> DB: VARCHAR2
96.2.17 oracledb.BUFFER <--> DB: FLOAT
96.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
96.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
96.2.20 oracledb.BUFFER <--> DB: DATE
96.2.21 oracledb.BUFFER <--> DB: TIMESTAMP
96.2.22 oracledb.BUFFER <--> DB: RAW
96.2.23 oracledb.BUFFER <--> DB: CLOB
96.2.24 oracledb.BUFFER <--> DB: BLOB
97.binding_functionBindOut.js
97.1 PLSQL function: bind out small value to oracledb.STRING/BUFFER
97.1.1 oracledb.STRING <--> DB: NUMBER
97.1.2 oracledb.STRING <--> DB: CHAR
97.1.3 oracledb.STRING <--> DB: NCHAR
97.1.4 oracledb.STRING <--> DB: VARCHAR2
97.1.5 oracledb.STRING <--> DB: FLOAT
97.1.6 oracledb.STRING <--> DB: BINARY_FLOAT
97.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE
97.1.8 oracledb.STRING <--> DB: DATE
97.1.9 oracledb.STRING <--> DB: TIMESTAMP
97.1.10 oracledb.STRING <--> DB: RAW
97.1.11 oracledb.STRING <--> DB: CLOB
97.1.12 oracledb.STRING <--> DB: BLOB
97.1.13 oracledb.BUFFER <--> DB: NUMBER
97.1.14 oracledb.BUFFER <--> DB: CHAR
97.1.15 oracledb.BUFFER <--> DB: NCHAR
97.1.16 oracledb.BUFFER <--> DB: VARCHAR2
97.1.17 oracledb.BUFFER <--> DB: FLOAT
97.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
97.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
97.1.20 oracledb.BUFFER <--> DB: DATE
97.1.21 oracledb.BUFFER <--> DB: TIMESTAMP
97.1.22 oracledb.BUFFER <--> DB: RAW
97.1.23 oracledb.BUFFER <--> DB: CLOB
97.1.24 oracledb.BUFFER <--> DB: BLOB
97.2 PLSQL function: bind out null value to oracledb.STRING/BUFFER
97.2.1 oracledb.STRING <--> DB: NUMBER
97.2.2 oracledb.STRING <--> DB: CHAR
97.2.3 oracledb.STRING <--> DB: NCHAR
97.2.4 oracledb.STRING <--> DB: VARCHAR2
97.2.5 oracledb.STRING <--> DB: FLOAT
97.2.6 oracledb.STRING <--> DB: BINARY_FLOAT
97.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE
97.2.8 oracledb.STRING <--> DB: DATE
97.2.9 oracledb.STRING <--> DB: TIMESTAMP
97.2.10 oracledb.STRING <--> DB: RAW
97.2.11 oracledb.STRING <--> DB: CLOB
97.2.12 oracledb.STRING <--> DB: BLOB
97.2.13 oracledb.BUFFER <--> DB: NUMBER
97.2.14 oracledb.BUFFER <--> DB: CHAR
97.2.15 oracledb.BUFFER <--> DB: NCHAR
97.2.16 oracledb.BUFFER <--> DB: VARCHAR2
97.2.17 oracledb.BUFFER <--> DB: FLOAT
97.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
97.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
97.2.20 oracledb.BUFFER <--> DB: DATE
97.2.21 oracledb.BUFFER <--> DB: TIMESTAMP
97.2.22 oracledb.BUFFER <--> DB: RAW
97.2.23 oracledb.BUFFER <--> DB: CLOB
97.2.24 oracledb.BUFFER <--> DB: BLOB
98.binding_DMLReturningInto.js
98.1 bind out small value
98.1.1 oracledb.STRING <--> DB: NUMBER
98.1.2 oracledb.STRING <--> DB: CHAR
98.1.3 oracledb.STRING <--> DB: NCHAR
98.1.4 oracledb.STRING <--> DB: VARCHAR2
98.1.5 oracledb.STRING <--> DB: FLOAT
98.1.6 oracledb.STRING <--> DB: BINARY_FLOAT
98.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE
98.1.8 oracledb.STRING <--> DB: DATE
98.1.9 oracledb.STRING <--> DB: TIMESTAMP
98.1.10 oracledb.STRING <--> DB: RAW
98.1.11 oracledb.STRING <--> DB: CLOB
98.1.12 oracledb.STRING <--> DB: BLOB
98.1.13 oracledb.BUFFER <--> DB: NUMBER
98.1.14 oracledb.BUFFER <--> DB: CHAR
98.1.15 oracledb.BUFFER <--> DB: NCHAR
98.1.16 oracledb.BUFFER <--> DB: VARCHAR2
98.1.17 oracledb.BUFFER <--> DB: FLOAT
98.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
98.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
98.1.20 oracledb.BUFFER <--> DB: DATE
98.1.21 oracledb.BUFFER <--> DB: TIMESTAMP
98.1.22 oracledb.BUFFER <--> DB: RAW
98.1.23 oracledb.BUFFER <--> DB: CLOB
98.1.24 oracledb.BUFFER <--> DB: BLOB
98.2 bind out null value
98.2.1 oracledb.STRING <--> DB: NUMBER
98.2.2 oracledb.STRING <--> DB: CHAR
98.2.3 oracledb.STRING <--> DB: NCHAR
98.2.4 oracledb.STRING <--> DB: VARCHAR2
98.2.5 oracledb.STRING <--> DB: FLOAT
98.2.6 oracledb.STRING <--> DB: BINARY_FLOAT
98.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE
98.2.8 oracledb.STRING <--> DB: DATE
98.2.9 oracledb.STRING <--> DB: TIMESTAMP
98.2.10 oracledb.STRING <--> DB: RAW
98.2.11 oracledb.STRING <--> DB: CLOB
98.2.12 oracledb.STRING <--> DB: BLOB
98.2.13 oracledb.BUFFER <--> DB: NUMBER
98.2.14 oracledb.BUFFER <--> DB: CHAR
98.2.15 oracledb.BUFFER <--> DB: NCHAR
98.2.16 oracledb.BUFFER <--> DB: VARCHAR2
98.2.17 oracledb.BUFFER <--> DB: FLOAT
98.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
98.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
98.2.20 oracledb.BUFFER <--> DB: DATE
98.2.21 oracledb.BUFFER <--> DB: TIMESTAMP
98.2.22 oracledb.BUFFER <--> DB: RAW
98.2.23 oracledb.BUFFER <--> DB: CLOB
98.2.24 oracledb.BUFFER <--> DB: BLOB
99.binding_functionBindIn.js
99.1 PLSQL function: bind in small value of oracledb.STRING/BUFFER
99.1.1 oracledb.STRING <--> DB: NUMBER
99.1.2 oracledb.STRING <--> DB: CHAR
99.1.3 oracledb.STRING <--> DB: NCHAR
99.1.4 oracledb.STRING <--> DB: VARCHAR2
99.1.5 oracledb.STRING <--> DB: FLOAT
99.1.6 oracledb.STRING <--> DB: BINARY_FLOAT
99.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE
99.1.8 oracledb.STRING <--> DB: DATE
99.1.9 oracledb.STRING <--> DB: TIMESTAMP
99.1.10 oracledb.STRING <--> DB: RAW
99.1.11 oracledb.STRING <--> DB: CLOB
99.1.12 oracledb.STRING <--> DB: BLOB
99.1.13 oracledb.BUFFER <--> DB: NUMBER
99.1.14 oracledb.BUFFER <--> DB: CHAR
99.1.15 oracledb.BUFFER <--> DB: NCHAR
99.1.16 oracledb.BUFFER <--> DB: VARCHAR2
99.1.17 oracledb.BUFFER <--> DB: FLOAT
99.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
99.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
99.1.20 oracledb.BUFFER <--> DB: DATE
99.1.21 oracledb.BUFFER <--> DB: TIMESTAMP
99.1.22 oracledb.BUFFER <--> DB: RAW
99.1.23 oracledb.BUFFER <--> DB: CLOB
99.1.24 oracledb.BUFFER <--> DB: BLOB
99.2 PLSQL function: bind in null value of oracledb.STRING/BUFFER
99.2.1 oracledb.STRING <--> DB: NUMBER
99.2.2 oracledb.STRING <--> DB: CHAR
99.2.3 oracledb.STRING <--> DB: NCHAR
99.2.4 oracledb.STRING <--> DB: VARCHAR2
99.2.5 oracledb.STRING <--> DB: FLOAT
99.2.6 oracledb.STRING <--> DB: BINARY_FLOAT
99.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE
99.2.8 oracledb.STRING <--> DB: DATE
99.2.9 oracledb.STRING <--> DB: TIMESTAMP
99.2.10 oracledb.STRING <--> DB: RAW
99.2.11 oracledb.STRING <--> DB: CLOB
99.2.12 oracledb.STRING <--> DB: BLOB
99.2.13 oracledb.BUFFER <--> DB: NUMBER
99.2.14 oracledb.BUFFER <--> DB: CHAR
99.2.15 oracledb.BUFFER <--> DB: NCHAR
99.2.16 oracledb.BUFFER <--> DB: VARCHAR2
99.2.17 oracledb.BUFFER <--> DB: FLOAT
99.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
99.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
99.2.20 oracledb.BUFFER <--> DB: DATE
99.2.21 oracledb.BUFFER <--> DB: TIMESTAMP
99.2.22 oracledb.BUFFER <--> DB: RAW
99.2.23 oracledb.BUFFER <--> DB: CLOB
99.2.24 oracledb.BUFFER <--> DB: BLOB
100.binding_defaultBindIn.js
100.1 PLSQL procedure: bind in null value with default type and dir
100.1.1 oracledb.STRING <--> DB: NUMBER
100.1.2 oracledb.STRING <--> DB: CHAR
100.1.3 oracledb.STRING <--> DB: NCHAR
100.1.4 oracledb.STRING <--> DB: VARCHAR2
100.1.5 oracledb.STRING <--> DB: FLOAT
100.1.6 oracledb.STRING <--> DB: BINARY_FLOAT
100.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE
100.1.8 oracledb.STRING <--> DB: DATE
100.1.9 oracledb.STRING <--> DB: TIMESTAMP
100.1.10 oracledb.STRING <--> DB: RAW
100.1.11 oracledb.STRING <--> DB: CLOB
100.1.12 oracledb.STRING <--> DB: BLOB
100.1.13 oracledb.BUFFER <--> DB: NUMBER
100.1.14 oracledb.BUFFER <--> DB: CHAR
100.1.15 oracledb.BUFFER <--> DB: NCHAR
100.1.16 oracledb.BUFFER <--> DB: VARCHAR2
100.1.17 oracledb.BUFFER <--> DB: FLOAT
100.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
100.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
100.1.20 oracledb.BUFFER <--> DB: DATE
100.1.21 oracledb.BUFFER <--> DB: TIMESTAMP
100.1.22 oracledb.BUFFER <--> DB: RAW
100.1.23 oracledb.BUFFER <--> DB: CLOB
100.1.24 oracledb.BUFFER <--> DB: BLOB
100.2 PLSQL function: bind in null value with default type and dir
100.2.1 oracledb.STRING <--> DB: NUMBER
100.2.2 oracledb.STRING <--> DB: CHAR
100.2.3 oracledb.STRING <--> DB: NCHAR
100.2.4 oracledb.STRING <--> DB: VARCHAR2
100.2.5 oracledb.STRING <--> DB: FLOAT
100.2.6 oracledb.STRING <--> DB: BINARY_FLOAT
100.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE
100.2.8 oracledb.STRING <--> DB: DATE
100.2.9 oracledb.STRING <--> DB: TIMESTAMP
100.2.10 oracledb.STRING <--> DB: RAW
100.2.11 oracledb.STRING <--> DB: CLOB
100.2.12 oracledb.STRING <--> DB: BLOB
100.2.13 oracledb.BUFFER <--> DB: NUMBER
100.2.14 oracledb.BUFFER <--> DB: CHAR
100.2.15 oracledb.BUFFER <--> DB: NCHAR
100.2.16 oracledb.BUFFER <--> DB: VARCHAR2
100.2.17 oracledb.BUFFER <--> DB: FLOAT
100.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
100.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
100.2.20 oracledb.BUFFER <--> DB: DATE
100.2.21 oracledb.BUFFER <--> DB: TIMESTAMP
100.2.22 oracledb.BUFFER <--> DB: RAW
100.2.23 oracledb.BUFFER <--> DB: CLOB
100.2.24 oracledb.BUFFER <--> DB: BLOB
101.binding_defaultBindInout.js
101.1 PLSQL procedure: bind out null value with default type and dir
101.1.1 oracledb.STRING <--> DB: NUMBER
101.1.2 oracledb.STRING <--> DB: CHAR
101.1.3 oracledb.STRING <--> DB: NCHAR
101.1.4 oracledb.STRING <--> DB: VARCHAR2
101.1.5 oracledb.STRING <--> DB: FLOAT
101.1.6 oracledb.STRING <--> DB: BINARY_FLOAT
101.1.7 oracledb.STRING <--> DB: BINARY_DOUBLE
101.1.8 oracledb.STRING <--> DB: DATE
101.1.9 oracledb.STRING <--> DB: TIMESTAMP
101.1.10 oracledb.STRING <--> DB: RAW
101.1.11 oracledb.STRING <--> DB: CLOB
101.1.12 oracledb.STRING <--> DB: BLOB
101.1.13 oracledb.BUFFER <--> DB: NUMBER
101.1.14 oracledb.BUFFER <--> DB: CHAR
101.1.15 oracledb.BUFFER <--> DB: NCHAR
101.1.16 oracledb.BUFFER <--> DB: VARCHAR2
101.1.17 oracledb.BUFFER <--> DB: FLOAT
101.1.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
101.1.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
101.1.20 oracledb.BUFFER <--> DB: DATE
101.1.21 oracledb.BUFFER <--> DB: TIMESTAMP
101.1.22 oracledb.BUFFER <--> DB: RAW
101.1.23 oracledb.BUFFER <--> DB: CLOB
101.1.24 oracledb.BUFFER <--> DB: BLOB
101.2 PLSQL procedure bind out null value with default type and dir
101.2.1 oracledb.STRING <--> DB: NUMBER
101.2.2 oracledb.STRING <--> DB: CHAR
101.2.3 oracledb.STRING <--> DB: NCHAR
101.2.4 oracledb.STRING <--> DB: VARCHAR2
101.2.5 oracledb.STRING <--> DB: FLOAT
101.2.6 oracledb.STRING <--> DB: BINARY_FLOAT
101.2.7 oracledb.STRING <--> DB: BINARY_DOUBLE
101.2.8 oracledb.STRING <--> DB: DATE
101.2.9 oracledb.STRING <--> DB: TIMESTAMP
101.2.10 oracledb.STRING <--> DB: RAW
101.2.11 oracledb.STRING <--> DB: CLOB
101.2.12 oracledb.STRING <--> DB: BLOB
101.2.13 oracledb.BUFFER <--> DB: NUMBER
101.2.14 oracledb.BUFFER <--> DB: CHAR
101.2.15 oracledb.BUFFER <--> DB: NCHAR
101.2.16 oracledb.BUFFER <--> DB: VARCHAR2
101.2.17 oracledb.BUFFER <--> DB: FLOAT
101.2.18 oracledb.BUFFER <--> DB: BINARY_FLOAT
101.2.19 oracledb.BUFFER <--> DB: BINARY_DOUBLE
101.2.20 oracledb.BUFFER <--> DB: DATE
101.2.21 oracledb.BUFFER <--> DB: TIMESTAMP
101.2.22 oracledb.BUFFER <--> DB: RAW
101.2.23 oracledb.BUFFER <--> DB: CLOB
101.2.24 oracledb.BUFFER <--> DB: BLOB

View File

@ -93,3 +93,13 @@ test/fetchBlobAsBuffer2.js
test/fetchBlobAsBuffer3.js
test/fetchClobAsString4.js
test/fetchBlobAsBuffer4.js
test/binding_DMLInsert.js
test/binding_procedureBindIn.js
test/binding_procedureBindInout.js
test/binding_functionBindInout.js
test/binding_procedureBindOut.js
test/binding_functionBindOut.js
test/binding_DMLReturningInto.js
test/binding_functionBindIn.js
test/binding_defaultBindIn.js
test/binding_defaultBindInout.js

View File

@ -39,3 +39,10 @@ random.getRandomString = function (length, specialStr) {
str = specialStr + str + specialStr;
return str;
};
random.getRandomLenString = function (length) {
var str='';
for( ; str.length < length; str += Math.random().toString(36).slice(2));
str = str.substr(0, length);
return str;
};

View File

@ -1,4 +1,4 @@
/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. */
/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. */
/******************************************************************************
*
@ -1399,5 +1399,66 @@ describe('12. resultSet1.js', function() {
}
});
});
describe('12.8 Testing errInvalidResultSet', function() {
it('12.8.1 Negative: UPDATE BIND out with oracledb.CURSOR - bind by name', function(done) {
var sql = "update nodb_rs1_emp set employees_name = 'abc' where employees_id = 1 RETURNING employees_name INTO :name";
connection.execute(
sql,
{ name: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } },
{ resultSet: true},
function(err) {
// NJS-018: invalid ResultSet
(err.message).should.startWith('NJS-018:');
done();
}
)
});
it('12.8.2 Negative: UPDATE BIND out with oracledb.CURSOR - bind by position', function(done) {
var sql = "update nodb_rs1_emp set employees_name = 'abc' where employees_id = 1 RETURNING employees_name INTO :name";
connection.execute(
sql,
[ { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } ],
{ resultSet: true},
function(err) {
// NJS-018: invalid ResultSet
(err.message).should.startWith('NJS-018:');
done();
}
)
});
it('12.8.3 Negative: INSERT BIND out with oracledb.CURSOR - bind by name', function(done) {
var sql = "insert into nodb_rs1_emp (:id, :name) RETURNING employees_name INTO :out";
connection.execute(
sql,
{
id: { val:1000, type: oracledb.CURSOR, dir: oracledb.BIND_OUT },
name: { val:'hello', type: oracledb.STRING, dir: oracledb.BIND_IN },
out: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
},
{ resultSet: true},
function(err) {
// NJS-018: invalid ResultSet
(err.message).should.startWith('NJS-018:');
done();
}
)
});
it('12.8.4 Negative: INSERT BIND out with oracledb.CURSOR - bind by position', function(done) {
var sql = "insert into nodb_rs1_emp (:id, :name) RETURNING employees_name INTO :out";
connection.execute(
sql,
[ 1001, 'hello', { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } ],
{ resultSet: true},
function(err) {
// NJS-018: invalid ResultSet
(err.message).should.startWith('NJS-018:');
done();
}
)
});
});
});

131
test/sql.js Normal file
View File

@ -0,0 +1,131 @@
/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */
/******************************************************************************
*
* You may not use the identified files except in compliance with the Apache
* License, Version 2.0 (the "License.")
*
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*
* The node-oracledb test suite uses 'mocha', 'should' and 'async'.
* See LICENSE.md for relevant licenses.
*
* NAME
* sql.js
*
* DESCRIPTION
* generate sql
*****************************************************************************/
'use strict';
var should = require('should');
var async = require('async');
var sql = exports;
module.exports = sql;
sql.createTable = function(tableName, dataType) {
var element = dataType;
if(dataType === "CHAR") {
element = element + "(1000)";
}
if(dataType === "NCHAR") {
element = element + "(1000)";
}
if(dataType === "VARCHAR2") {
element = element + "(1000)";
}
if(dataType === "RAW") {
element = element + "(1000)";
}
var sql = "BEGIN \n" +
" DECLARE \n" +
" e_table_missing EXCEPTION; \n" +
" PRAGMA EXCEPTION_INIT(e_table_missing, -00942);\n" +
" BEGIN \n" +
" EXECUTE IMMEDIATE ('DROP TABLE " + tableName + " PURGE' ); \n" +
" EXCEPTION \n" +
" WHEN e_table_missing \n" +
" THEN NULL; \n" +
" END; \n" +
" EXECUTE IMMEDIATE ( ' \n" +
" CREATE TABLE " + tableName + " ( \n" +
" id NUMBER, \n" +
" content " + element + " \n" +
" ) \n" +
" '); \n" +
"END; ";
return sql;
};
sql.createAllTable = function(tableName, dataTypeArray) {
var sql = "BEGIN \n" +
" DECLARE \n" +
" e_table_missing EXCEPTION; \n" +
" PRAGMA EXCEPTION_INIT(e_table_missing, -00942);\n" +
" BEGIN \n" +
" EXECUTE IMMEDIATE ('DROP TABLE " + tableName + " PURGE' ); \n" +
" EXCEPTION \n" +
" WHEN e_table_missing \n" +
" THEN NULL; \n" +
" END; \n" +
" EXECUTE IMMEDIATE ( ' \n" +
" CREATE TABLE " + tableName + " ( \n" +
" id NUMBER, \n" ;
async.forEach(dataTypeArray, function(element, cb) {
var index = dataTypeArray.indexOf(element);
var length = dataTypeArray.length;
var col_name = "col_" + ( index + 1 );
var col_type = element;
var isLast;
if(col_type === "CHAR") {
element = element + "(2000)";
}
if(col_type === "NCHAR") {
element = element + "(1000)";
}
if(col_type === "VARCHAR2") {
element = element + "(4000)";
}
if(col_type === "RAW") {
element = element + "(2000)";
}
isLast = (index == (length - 1)) ? true : false;
sql = appendSql(sql, col_name, element, isLast);
// cb();
}, function(err) {
should.not.exist(err);
});
sql = sql +
" ) \n" +
" '); \n" +
"END; ";
return sql;
};
sql.executeSql = function(connection, sql) {
connection.execute(
sql,
function(err) {
should.not.exist(err);
}
);
};
var appendSql = function(sql, col_name, col_type, isLast) {
if(isLast === true) {
sql = sql + " " + col_name + " " + col_type + " \n";
} else {
sql = sql + " " +col_name + " " + col_type + ", \n";
}
return sql;
};