Skip to content

Commit 679df54

Browse files
committed
Update date example, showing ALTER SESSION
1 parent b4d464e commit 679df54

File tree

1 file changed

+111
-124
lines changed

1 file changed

+111
-124
lines changed

examples/date.js

Lines changed: 111 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -25,140 +25,127 @@
2525
* TIMESTAMP WITH LOCAL TIMEZONE. Similarly for queries, TIMESTAMP
2626
* and DATE columns are fetched as TIMESTAMP WITH LOCAL TIMEZONE.
2727
*
28-
* This demo also shows rollback.
29-
*
3028
*****************************************************************************///
3129

30+
var async = require('async');
3231
var oracledb = require('oracledb');
3332
var dbConfig = require('./dbconfig.js');
34-
var connection;
35-
36-
oracledb.getConnection(
37-
{
38-
user : dbConfig.user,
39-
password : dbConfig.password,
40-
connectString : dbConfig.connectString
41-
},
42-
createTable
43-
);
44-
45-
function createTable(err, conn) {
46-
var script;
47-
48-
if (err) {
49-
console.error(err.message);
50-
return;
51-
}
52-
53-
connection = conn;
54-
script = getCreateTableScript();
55-
56-
connection.execute(
57-
script,
58-
insertTestData
59-
);
60-
}
61-
62-
function insertTestData(err) {
63-
var date;
6433

65-
if (err) {
66-
console.error(err.message);
67-
return;
68-
}
69-
70-
date = new Date();
34+
var doconnect = function(cb) {
35+
oracledb.getConnection(
36+
{
37+
user : dbConfig.user,
38+
password : dbConfig.password,
39+
connectString : dbConfig.connectString
40+
},
41+
cb);
42+
};
43+
44+
var dorelease = function(conn) {
45+
conn.close(function (err) {
46+
if (err)
47+
console.error(err.message);
48+
});
49+
};
50+
51+
var docleanup = function (conn, cb) {
52+
conn.execute(
53+
"BEGIN " +
54+
" DECLARE" +
55+
" e_table_exists EXCEPTION;" +
56+
" PRAGMA EXCEPTION_INIT(e_table_exists, -00942);" +
57+
" BEGIN" +
58+
" EXECUTE IMMEDIATE ('DROP TABLE datetest');" +
59+
" EXCEPTION" +
60+
" WHEN e_table_exists" +
61+
" THEN NULL;" +
62+
" END; " +
63+
"END;",
64+
function(err) {
65+
return cb(err, conn);
66+
});
67+
};
68+
69+
var docreate = function(conn, cb) {
70+
conn.execute(
71+
"CREATE TABLE datetest(timestampcol TIMESTAMP, datecol DATE)",
72+
function(err) {
73+
return cb(err, conn);
74+
});
75+
};
76+
77+
// Setting a local timezone in applications is recommended.
78+
// Note setting the environment variable ORA_SDTZ is an efficient alternative.
79+
var doalter = function(conn, cb) {
80+
console.log('Altering session time zone');
81+
conn.execute(
82+
"ALTER SESSION SET TIME_ZONE='UTC'",
83+
function(err) {
84+
return cb(err, conn);
85+
});
86+
};
87+
88+
// When bound, JavaScript Dates are inserted using TIMESTAMP WITH LOCAL TIMEZONE
89+
var doinsert = function(conn, cb) {
90+
var date = new Date();
7191

7292
console.log("Inserting JavaScript date: " + date);
7393

74-
// When bound, JavaScript Dates are inserted using TIMESTAMP WITH LOCAL TIMEZONE
75-
connection.execute(
94+
conn.execute(
7695
"INSERT INTO datetest (timestampcol, datecol) VALUES (:ts, :td)",
77-
{
78-
ts: date,
79-
td: date
80-
},
81-
{autoCommit : false},
82-
selectData
83-
);
84-
}
96+
{ ts: date,
97+
td: date },
98+
function(err, result) {
99+
if (err)
100+
return cb(err, conn);
85101

86-
function selectData(err, result) {
87-
if (err) {
88-
console.error(err.message);
89-
return;
90-
}
102+
console.log('Rows inserted: ' + result.rowsAffected );
103+
return cb(null, conn);
104+
});
105+
};
91106

92-
console.log("----- Insertion Done --------");
93-
console.log('rowsAffected = %d', result.rowsAffected);
94107

95-
connection.execute(
108+
// Fetch the dates
109+
var doselect = function(conn, cb) {
110+
conn.execute(
96111
"SELECT timestampcol, datecol FROM datetest",
97-
processResults
98-
);
99-
}
100-
101-
function processResults(err, result) {
102-
var ts;
103-
var d;
104-
105-
if (err) {
106-
console.error(err.message);
107-
return;
108-
}
109-
110-
console.log("----- Query Results --------");
111-
console.log(result.rows);
112-
113-
console.log("----- JavaScript Date Manipulation --------");
114-
// Show the queried dates are of type Date
115-
ts = result.rows[0][0];
116-
ts.setDate(ts.getDate() + 5);
117-
console.log(ts);
118-
119-
d = result.rows[0][1];
120-
d.setDate(d.getDate() - 5);
121-
console.log(d);
122-
123-
connection.rollback(releaseConnection); // don't actually commit the new row on exit
124-
}
125-
126-
function releaseConnection(err) {
127-
if (err) {
128-
console.error(err.message);
129-
return;
130-
}
131-
132-
console.log("----- Rollback complete --------");
133-
connection.close(logReleaseError); // close the connection
134-
}
135-
136-
function logReleaseError(err) {
137-
if (err) {
138-
console.error(err.message);
139-
return;
140-
}
141-
}
142-
143-
function getCreateTableScript() {
144-
var script =
145-
"BEGIN " +
146-
" DECLARE " +
147-
" e_table_exists EXCEPTION; " +
148-
" PRAGMA EXCEPTION_INIT(e_table_exists, -00942); " +
149-
" BEGIN " +
150-
" EXECUTE IMMEDIATE ('DROP TABLE datetest'); " +
151-
" EXCEPTION " +
152-
" WHEN e_table_exists " +
153-
" THEN NULL; " +
154-
" END; " +
155-
" EXECUTE IMMEDIATE (' " +
156-
" CREATE TABLE datetest ( " +
157-
" timestampcol TIMESTAMP, " +
158-
" datecol DATE " +
159-
" )" +
160-
" '); " +
161-
"END; ";
162-
163-
return script;
164-
}
112+
function(err, result) {
113+
if (err) {
114+
return cb(err, conn);
115+
}
116+
117+
console.log("Query Results:");
118+
console.log(result.rows);
119+
120+
// Show the queried dates are of type Date
121+
console.log("Result Manipulation in JavaScript:");
122+
var ts = result.rows[0][0];
123+
ts.setDate(ts.getDate() + 5);
124+
console.log(ts);
125+
126+
var d = result.rows[0][1];
127+
d.setDate(d.getDate() - 5);
128+
console.log(d);
129+
130+
cb(null, conn);
131+
});
132+
};
133+
134+
// Main routine
135+
async.waterfall([
136+
doconnect,
137+
docleanup,
138+
docreate,
139+
doinsert,
140+
141+
doselect,
142+
doalter,
143+
doselect,
144+
145+
docleanup
146+
],
147+
function (err, conn) {
148+
if (err) { console.error("In waterfall error cb: ==>", err, "<=="); }
149+
if (conn)
150+
dorelease(conn);
151+
});

0 commit comments

Comments
 (0)