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 */ #define NJS_ITER_SIZE 65535 /* Use (64KB - 1) with 11g Clients */
#endif #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 // number of rows prefetched by non-ResultSet queries
#define NJS_PREFETCH_NON_RESULTSET 2 #define NJS_PREFETCH_NON_RESULTSET 2
@ -1088,6 +1085,7 @@ void Connection::GetInBindParamsScalar(Local<Value> v8val, Bind* bind,
{ {
case NJS_VALUETYPE_NULL: case NJS_VALUETYPE_NULL:
bind->value = NULL; bind->value = NULL;
*(bind->len) = 0; /* NULL value provided, no buffer used */
bind->type = dpi::DpiVarChar; bind->type = dpi::DpiVarChar;
break; break;
@ -2403,41 +2401,17 @@ void Connection::Descr2StringOrBuffer ( eBaton* executeBaton )
* index - Index of the Bind vector * index - Index of the Bind vector
* *
* NOTE: * NOTE:
* Bind enhancements for CLOB/BLOB As String/Buffer not supported for INOUT * Bind type is expected only STRING and RAW
* arguments
* *
*/ */
void Connection::ConvertStringOrBuffer2LOB ( eBaton* executeBaton, void Connection::ConvertStringOrBuffer2LOB ( eBaton* executeBaton,
unsigned int index ) unsigned int index )
{ {
Bind *bind = executeBaton->binds[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; extBind->fields.extLob.maxSize = bind->maxSize;
// Convert the input data into Temp LOB for IN and INOUT binds // 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 // Change the bind->type to LOB to handle more than 32k data
bind->type = ( bind->type == DpiVarChar ) ? DpiClob : DpiBlob; 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) void Connection::PrepareAndBind (eBaton* executeBaton)
{ {
executeBaton->dpistmt = executeBaton->dpiconn->getStmt(executeBaton->sql); executeBaton->dpistmt = executeBaton->dpiconn->
executeBaton->st = executeBaton->dpistmt->stmtType (); getStmt(executeBaton->sql);
executeBaton->st = executeBaton->dpistmt->stmtType ();
executeBaton->stmtIsReturning = executeBaton->dpistmt->isReturning (); executeBaton->stmtIsReturning = executeBaton->dpistmt->isReturning ();
ExtBind *extBind = NULL ; ExtBind *extBind = NULL ;
if(!executeBaton->binds.empty()) 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(); if ( executeBaton->binds[index]->isOut &&
index++) executeBaton->stmtIsReturning &&
executeBaton->binds[index]->type == dpi::DpiRSet )
{ {
if ( executeBaton->binds[index]->isOut && executeBaton->error = NJSMessages::getErrorMsg (
executeBaton->stmtIsReturning && errInvalidResultSet ) ;
executeBaton->binds[index]->type == dpi::DpiRSet ) goto exitPrepareAndBind;
{ }
executeBaton->error = NJSMessages::getErrorMsg (
errInvalidResultSet ) ;
goto exitPrepareAndBind;
}
// Process bind enhancements CLOB/BLOB As String/Buffer for PL/SQL // Process bind enhancements CLOB/BLOB As String/Buffer for PL/SQL
if ( ( executeBaton->st == DpiStmtBegin || /* Interested only in PL/SQL procedure calls */
executeBaton->st == DpiStmtDeclare || if ( ( executeBaton->st == DpiStmtBegin ||
executeBaton->st == DpiStmtCall ) && executeBaton->st == DpiStmtDeclare ||
( executeBaton->binds[index]->type == DpiVarChar || executeBaton->st == DpiStmtCall ))
executeBaton->binds[index]->type == DpiRaw ) ) {
/* 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() ) if ( !executeBaton->error.empty() )
{ {
goto exitPrepareAndBind; goto exitPrepareAndBind;
} }
}
// process LOB object for IN and INOUT bind // Convert v8::Date to Oracle DB Type for IN and IN/OUT binds
if ( ( executeBaton->binds[index]->isInOut || if ( executeBaton->binds[index]->type == DpiTimestampLTZ &&
!executeBaton->binds[index]->isOut ) && ( executeBaton->binds[index]->isInOut || // INOUT binds
( *(executeBaton->binds[index]->ind) != -1 ) && !executeBaton->binds[index]->isOut ) ) // NOT OUT && NOT INOUT
( executeBaton->binds[index]->type == DpiClob || {
executeBaton->binds[index]->type == DpiBlob ) ) 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 ); executeBaton->error = NJSMessages::getErrorMsg (
}
// 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 (
errInsufficientMemory ); errInsufficientMemory );
goto exitPrepareAndBind; 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;
} }
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 // Bind by name
executeBaton->dpistmt->bind( executeBaton->dpistmt->bind(
(const unsigned char*)executeBaton->binds[index]->key.c_str(), (const unsigned char*)executeBaton->binds[index]->key.c_str(),
@ -2630,83 +2614,8 @@ void Connection::PrepareAndBind (eBaton* executeBaton)
executeBaton->binds[index]->isOut) ? executeBaton->binds[index]->isOut) ?
extBind->fields.extDMLReturnCbCtx.ctx : NULL); extBind->fields.extDMLReturnCbCtx.ctx : NULL);
} }
} else
else
{
for(unsigned int index = 0 ;index < executeBaton->binds.size();
index++)
{ {
// 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 // Bind by position
executeBaton->dpistmt->bind( executeBaton->dpistmt->bind(
index+1,executeBaton->binds[index]->type, index+1,executeBaton->binds[index]->type,

View File

@ -66,6 +66,9 @@ using namespace dpi;
class Connection; class Connection;
class ProtoILob; class ProtoILob;
// Max number of bytes allowed for PLSQL STRING/BUFFER arguments
#define NJS_THRESHOLD_SIZE_PLSQL_STRING_ARG 32767
// Extended bind type // Extended bind type
typedef enum typedef enum
{ {
@ -760,6 +763,9 @@ private:
ProtoILob *protoILob, ProtoILob *protoILob,
bool isAutoCloseLob = true ); bool isAutoCloseLob = true );
/*
* Inline function to identify v8 type from given v8::value
*/
static inline ValueType GetValueType ( v8::Local<v8::Value> v ) static inline ValueType GetValueType ( v8::Local<v8::Value> v )
{ {
ValueType type = NJS_VALUETYPE_INVALID; ValueType type = NJS_VALUETYPE_INVALID;
@ -796,6 +802,46 @@ private:
return type; 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_; dpi::Conn* dpiconn_;
bool isValid_; 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(); done();
}); // afterEach }); // 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" + 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" + "IS \n" +
" tmpLOB4 BLOB; \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" + " select blob into tmpLOB4 from nodb_blob_1 where num_1 = ID_1;\n" +
" RETURN tmpLOB4; \n" + " RETURN tmpLOB4; \n" +
"END;"; "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 proc_drop = "DROP FUNCTION nodb_blobs_out_94";
var len = 400; var len = 400;
@ -178,11 +178,11 @@ describe('91. fetchBlobAsBuffer4.js', function() {
function(cb) { function(cb) {
connection.execute( connection.execute(
sqlRun, 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) { function(err, result) {
should.not.exist(err); should.not.exist(err);
var resultVal = result.outBinds.output; var resultVal = result.outBinds[0];
var compareBuffer = assist.compare2Buffers(resultVal, content); var compareBuffer = assist.compare2Buffers(content, resultVal);
should.strictEqual(compareBuffer, true); should.strictEqual(compareBuffer, true);
cb(); cb();
} }
@ -249,7 +249,7 @@ describe('91. fetchBlobAsBuffer4.js', function() {
], done); ], done);
}); // 91.1.2 }); // 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" + 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" + "IS \n" +
" tmpLOB4 BLOB; \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" + " select blob into tmpLOB4 from nodb_blob_1 where num_1 = ID_1;\n" +
" RETURN tmpLOB4; \n" + " RETURN tmpLOB4; \n" +
"END;"; "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 proc_drop = "DROP FUNCTION nodb_blobs_out_94";
var len = 400; var len = 400;
@ -283,10 +283,10 @@ describe('91. fetchBlobAsBuffer4.js', function() {
function(cb) { function(cb) {
connection.execute( connection.execute(
sqlRun, 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) { function(err, result) {
should.not.exist(err); should.not.exist(err);
var resultVal = result.outBinds.output; var resultVal = result.outBinds[0];
var compareBuffer = assist.compare2Buffers(resultVal, content); var compareBuffer = assist.compare2Buffers(resultVal, content);
should.strictEqual(compareBuffer, true); should.strictEqual(compareBuffer, true);
cb(); cb();
@ -375,7 +375,7 @@ describe('91. fetchBlobAsBuffer4.js', function() {
done(); done();
}); // afterEach }); // 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 len = 500;
var sequence = insertID++; var sequence = insertID++;
var specialStr = "91.2.1"; var specialStr = "91.2.1";
@ -399,10 +399,10 @@ describe('91. fetchBlobAsBuffer4.js', function() {
function(cb) { function(cb) {
connection.execute( connection.execute(
sqlRun, 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) { function(err, result) {
should.not.exist(err); should.not.exist(err);
var resultVal = result.outBinds.c2; var resultVal = result.outBinds[0];
var compareBuffer = assist.compare2Buffers(resultVal, content); var compareBuffer = assist.compare2Buffers(resultVal, content);
should.strictEqual(compareBuffer, true); should.strictEqual(compareBuffer, true);
cb(); cb();
@ -460,7 +460,7 @@ describe('91. fetchBlobAsBuffer4.js', function() {
], done); ], done);
}); // 91.2.2 }); // 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 len = 500;
var sequence = insertID++; var sequence = insertID++;
var specialStr = "91.2.3"; var specialStr = "91.2.3";
@ -484,10 +484,10 @@ describe('91. fetchBlobAsBuffer4.js', function() {
function(cb) { function(cb) {
connection.execute( connection.execute(
sqlRun, 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) { function(err, result) {
should.not.exist(err); should.not.exist(err);
var resultVal = result.outBinds.c2; var resultVal = result.outBinds[0];
var compareBuffer = assist.compare2Buffers(resultVal, content); var compareBuffer = assist.compare2Buffers(resultVal, content);
should.strictEqual(compareBuffer, true); should.strictEqual(compareBuffer, true);
cb(); cb();
@ -615,7 +615,7 @@ describe('91. fetchBlobAsBuffer4.js', function() {
], done); ], done);
}); // 91.3.1 }); // 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 len = 1000;
var sequence = insertID++; var sequence = insertID++;
var specialStr = "91.3.2"; var specialStr = "91.3.2";
@ -637,11 +637,11 @@ describe('91. fetchBlobAsBuffer4.js', function() {
connection.execute( connection.execute(
sqlRun, 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) { function(err, result) {
should.not.exist(err); should.not.exist(err);
var resultVal = result.outBinds.output; var resultVal = result.outBinds[0];
var compareBuffer = assist.compare2Buffers(resultVal, content); var compareBuffer = assist.compare2Buffers(resultVal, content);
should.strictEqual(compareBuffer, true); should.strictEqual(compareBuffer, true);
cb(); cb();
@ -690,7 +690,7 @@ describe('91. fetchBlobAsBuffer4.js', function() {
], done); ], done);
}); // 91.3.3 }); // 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 len = 1000;
var sequence = insertID++; var sequence = insertID++;
var specialStr = "91.3.4"; var specialStr = "91.3.4";
@ -712,11 +712,11 @@ describe('91. fetchBlobAsBuffer4.js', function() {
connection.execute( connection.execute(
sqlRun, 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) { function(err, result) {
should.not.exist(err); should.not.exist(err);
var resultVal = result.outBinds.output; var resultVal = result.outBinds[0];
var compareBuffer = assist.compare2Buffers(resultVal, content); var compareBuffer = assist.compare2Buffers(resultVal, content);
should.strictEqual(compareBuffer, true); should.strictEqual(compareBuffer, true);
cb(); cb();

View File

@ -165,7 +165,7 @@ describe('90. fetchClobAsString4.js', function() {
done(); done();
}); // afterEach }); // 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 len = 400;
var sequence = insertID++; var sequence = insertID++;
var specialStr = "90.1.1"; var specialStr = "90.1.1";
@ -185,10 +185,10 @@ describe('90. fetchClobAsString4.js', function() {
function(cb) { function(cb) {
connection.execute( connection.execute(
sqlRun, 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) { function(err, result) {
should.not.exist(err); should.not.exist(err);
var resultVal = result.outBinds.output; var resultVal = result.outBinds[0];
verifyResult(resultVal, specialStr, clobStr); verifyResult(resultVal, specialStr, clobStr);
cb(); cb();
} }
@ -234,7 +234,7 @@ describe('90. fetchClobAsString4.js', function() {
], done); ], done);
}); // 90.1.2 }); // 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 len = 400;
var sequence = insertID++; var sequence = insertID++;
var specialStr = "90.1.2"; var specialStr = "90.1.2";
@ -254,10 +254,10 @@ describe('90. fetchClobAsString4.js', function() {
function(cb) { function(cb) {
connection.execute( connection.execute(
sqlRun, 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) { function(err, result) {
should.not.exist(err); should.not.exist(err);
var resultVal = result.outBinds.output; var resultVal = result.outBinds[0];
verifyResult(resultVal, specialStr, clobStr); verifyResult(resultVal, specialStr, clobStr);
cb(); cb();
} }
@ -332,7 +332,7 @@ describe('90. fetchClobAsString4.js', function() {
done(); done();
}); // afterEach }); // 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 len = 500;
var sequence = insertID++; var sequence = insertID++;
var specialStr = "90.2.1"; var specialStr = "90.2.1";
@ -352,10 +352,10 @@ describe('90. fetchClobAsString4.js', function() {
function(cb) { function(cb) {
connection.execute( connection.execute(
sqlRun, 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) { function(err, result) {
should.not.exist(err); should.not.exist(err);
var resultVal = result.outBinds.c2; var resultVal = result.outBinds[0];
verifyResult(resultVal, specialStr, clobStr); verifyResult(resultVal, specialStr, clobStr);
cb(); cb();
} }
@ -401,7 +401,7 @@ describe('90. fetchClobAsString4.js', function() {
], done); ], done);
}); // 90.2.2 }); // 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 len = 500;
var sequence = insertID++; var sequence = insertID++;
var specialStr = "90.2.3"; var specialStr = "90.2.3";
@ -421,10 +421,10 @@ describe('90. fetchClobAsString4.js', function() {
function(cb) { function(cb) {
connection.execute( connection.execute(
sqlRun, 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) { function(err, result) {
should.not.exist(err); should.not.exist(err);
var resultVal = result.outBinds.c2; var resultVal = result.outBinds[0];
verifyResult(resultVal, specialStr, clobStr); verifyResult(resultVal, specialStr, clobStr);
cb(); cb();
} }
@ -538,7 +538,7 @@ describe('90. fetchClobAsString4.js', function() {
], done); ], done);
}); // 90.3.1 }); // 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 len = 1000;
var sequence = insertID++; var sequence = insertID++;
var specialStr = "90.3.1"; var specialStr = "90.3.1";
@ -558,10 +558,10 @@ describe('90. fetchClobAsString4.js', function() {
function(cb) { function(cb) {
connection.execute( connection.execute(
sqlRun, 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) { function(err, result) {
should.not.exist(err); should.not.exist(err);
var resultVal = result.outBinds.output; var resultVal = result.outBinds[0];
verifyResult(resultVal, specialStr, clobStr); verifyResult(resultVal, specialStr, clobStr);
cb(); cb();
} }
@ -607,7 +607,7 @@ describe('90. fetchClobAsString4.js', function() {
], done); ], done);
}); // 90.3.3 }); // 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 len = 1000;
var sequence = insertID++; var sequence = insertID++;
var specialStr = "90.3.4"; var specialStr = "90.3.4";
@ -627,10 +627,10 @@ describe('90. fetchClobAsString4.js', function() {
function(cb) { function(cb) {
connection.execute( connection.execute(
sqlRun, 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) { function(err, result) {
should.not.exist(err); should.not.exist(err);
var resultVal = result.outBinds.output; var resultVal = result.outBinds[0];
verifyResult(resultVal, specialStr, clobStr); verifyResult(resultVal, specialStr, clobStr);
cb(); cb();
} }

View File

@ -262,6 +262,11 @@ Overview of node-oracledb functional tests
12.7 Testing maxRows 12.7 Testing maxRows
12.7.1 maxRows option is ignored when resultSet option is true 12.7.1 maxRows option is ignored when resultSet option is true
12.7.2 maxRows option is ignored with REF Cursor 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. stream1.js
13.1 Testing QueryStream 13.1 Testing QueryStream
@ -1927,34 +1932,579 @@ Overview of node-oracledb functional tests
90. fetchClobAsString4.js 90. fetchClobAsString4.js
90.1 PLSQL FUNCTION RETURN CLOB to STRING 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.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.1.4 bind by name - 2
90.2 PLSQL PROCEDURE BIND OUT CLOB to STRING 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.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.2.4 bind by name - 2
90.3 PLSQL FUNCTION RETURN CLOB to VARCHAR2 90.3 PLSQL FUNCTION RETURN CLOB to VARCHAR2
90.3.1 bind by name - 1 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.3 bind by name - 2
- 90.3.4 bind by position - 2 90.3.4 bind by position - 2
91. fetchBlobAsBuffer4.js 91. fetchBlobAsBuffer4.js
91.1 PLSQL FUNCTION RETURN BLOB to BUFFER 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.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.1.4 bind by name - 2
91.2 PLSQL PROCEDURE BIND OUT BLOB to BUFFER 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.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.2.4 bind by name - 2
91.3 PLSQL FUNCTION RETURN BLOB to RAW 91.3 PLSQL FUNCTION RETURN BLOB to RAW
91.3.1 bind by name - 1 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.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/fetchBlobAsBuffer3.js
test/fetchClobAsString4.js test/fetchClobAsString4.js
test/fetchBlobAsBuffer4.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; str = specialStr + str + specialStr;
return str; 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;
};