-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Closed
Labels
Description
$ npm list|grep oracle
├── [email protected]
$ uname -a
Linux tnt-factory-ubuntu 5.15.0-76-generic #83-Ubuntu SMP Thu Jun 15 19:16:32 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
................ node.js ........................
oracledb.fetchAsString = [oracledb.DB_TYPE_RAW];
,..
select saddr from v$session where rownum <= 1;
..
..............
-
thick mode
00000000690F5028 <--- fetch as string / good -
thin mode
{"data": [0,0,0,0,105,15,80,40], "type": "Buffer"} -- not good
----oracle node impl/resultset.js source ...
103 // in thin mode, Oracle NUMBER values are internally fetched as string in
104 // order to preserve precision so must be converted to JavaScript Number
105 // when needed; other numeric and date types are fetched natively as
106 // JavaScript Number and Date values and are converted to string using
107 // toString() when desired
108 if (settings.thin) {
109 let converter;
110 const userConverter = metadata.converter;
111 if (metadata.dbType === types.DB_TYPE_NUMBER &&
112 metadata.fetchType === types.DB_TYPE_NUMBER) {
113 converter = (v) => (v === null) ? null : parseFloat(v);
114 } else if (metadata.fetchType === types.DB_TYPE_VARCHAR && <---------- DB_TYPE_RAW NOT exists???
115 (metadata.dbType === types.DB_TYPE_BINARY_DOUBLE ||
116 metadata.dbType === types.DB_TYPE_BINARY_FLOAT ||
117 metadata.dbType === types.DB_TYPE_DATE ||
118 metadata.dbType === types.DB_TYPE_TIMESTAMP ||
119 metadata.dbType === types.DB_TYPE_TIMESTAMP_LTZ ||
120 metadata.dbType === types.DB_TYPE_TIMESTAMP_TZ)) {
121 converter = (v) => (v === null) ? null : v.toString();
122 }
123 if (userConverter && converter) {
124 const internalConverter = converter;
125 converter = (v) => userConverter(internalConverter(v));
126 }
127 if (converter) {
128 metadata.converter = converter;
129 }
130 }
131