IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

connexion base Oracle


Sujet :

NodeJS

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    485
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 485
    Par défaut connexion base Oracle
    Bonjour,

    J'essaie de me connecter à une base oracle en utilisant le package oracledb (https://www.npmjs.com/package/oracledb)

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    const oracledb = require('oracledb');
     
    const config = {
      user: "monuser",
      password: "monpassword",
      connectString: "(DESCRIPTION= \
                        (ADDRESS=(PROTOCOL=TCP)(HOST=MON_HOST)(PORT=1521)) \
                        (CONNECT_DATA=(SERVER=DEDICATED)(SID=MON_SID)) \
                      )"
    };
     
    oracledb.initOracleClient();
     
    const sqlGet = async () => {
      let connection;
      try {
        let sql1, sql2, binds, options, result;
        connection = await oracledb.getConnection(config);
        console.log(connection);
        console.log(connection.isHealthy());
     
        sql1 = `ALTER SESSION GET CURRENT_SCHEMA = myschema`;
     
        console.log(sql1);
     
        options = {
          outFormat: oracledb.OUT_FORMAT_OBJECT,   // query result format
        };
     
        result = await connection.execute(sql1);
     
    console.log("Query results: ");
        console.dir(result.rows, { depth: null });
        return result.rows
      } catch (err) {
        console.error(err);
      } finally {
        if (connection) {
          try {
            await connection.close();
          } catch (err) {
            console.error(err);
          }
        }
      }
    };
    Mais quand j'appelle sqlGet, j'ai l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Error: ORA-00922: option erronée ou absente
        at async Object.sqlGet (D:\monfichierjs.js:72:14) {
      errorNum: 922,
      offset: 14,
      code: 'ORA-00922'
    }
    ligne 72 correspond à la commande execute.
    l'instruction isHealthy() en début de fonction renvoie true, donc la connexion est bien établie.

    Qu'est ce qui cloche?

    Merci,

    Nico

  2. #2
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 429
    Par défaut
    Bonjour,

    ALTER SESSION SET ... à la place de ALTER SESSION GET ... ?

    https://docs.oracle.com/en/database/...R-SESSION.html

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    485
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 485
    Par défaut
    ok merci,

    J'ai maintenant un autre problème :
    Je travaille avec des données géographiques, et quand je lance cette requête sur la base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ....
    sql = `SELECT SDO_UTIL.EXTRACT(LLDG_GEOM, 1).SDO_ORDINATES AS INFOS FROM bdgsv2.FEATURE_GEOMETRY_VW WHERE REP_ID = 71430`;
     
    binds = {};
     
    options = {
          outFormat: oracledb.OUT_FORMAT_OBJECT,   // query result format
        };
     
    result = await connection.execute(sql, binds, options);
    ....
    J'ai un message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Error: ORA-24328: valeur d'attribut non autorisée
        at async Object.sqlGet (monfichierjs.js:87:14) {
      errorNum: 24328,
      offset: 0,
      code: 'ORA-24328'
    }
    Si je lance ma requête sous SQL Plus, elle fonctionne parfaitement

    Est-ce que le module oracledb sait gérer les fonctions géographiques d'Oracle Spatial ? ou est ce que le problème est ailleurs ?


    Nico

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    485
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 485
    Par défaut
    J'ai trouvé autre chose de surprenant : je teste la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SDO_UTIL.TO_GEOJSON(LLDG_GEOM) AS infos FROM bdgsv2.FEATURE_GEOMETRY_VW WHERE REP_ID = 71430;
    Quand je la lance dans SQL Plus, je récupère bien la géometrie de mon feature au format GeoJSON :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> SELECT SDO_UTIL.TO_GEOJSON(LLDG_GEOM) AS infos FROM bdgsv2.FEATURE_GEOMETRY_VW WHERE REP_ID = 71430;
     
    INFOS
    --------------------------------------------------------------------------------
    { "type": "Polygon", "coordinates": [ [ [-4.7896063, 48.4337409], [-4.790071, 48
    mais quand je l'exécute à partir de oracledb, je récupére ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    SELECT SDO_UTIL.TO_GEOJSON(LLDG_GEOM) AS infos FROM bdgsv2.FEATURE_GEOMETRY_VW WHERE REP_ID = 71430
    Query results:
    [
      {
        INFOS: Lob {
          _events: {
            close: undefined,
            error: undefined,
            prefinish: undefined,
            finish: [Function: bound onceWrapper] {
              listener: [Function (anonymous)]
            },
            drain: undefined,
            data: undefined,
            end: undefined,
            readable: undefined
          },
          _readableState: ReadableState {
            highWaterMark: 16384,
            buffer: [],
            bufferIndex: 0,
            length: 0,
            pipes: [],
            awaitDrainWriters: null,
            [Symbol(kState)]: 1052940
          },
          _writableState: WritableState {
            highWaterMark: 16384,
            length: 0,
            corked: 0,
            onwrite: [Function: bound onwrite],
            writelen: 0,
            bufferedIndex: 0,
            pendingcb: 0,
            [Symbol(kState)]: 17564428,
            [Symbol(kBufferedValue)]: null
          },
          allowHalfOpen: true,
          _maxListeners: undefined,
          offset: 1,
          _isActive: false,
          _eventsCount: 1,
          _impl: LobImpl {
            _parentObj: ResultSetImpl {
              _parentObj: ConnectionImpl {
                _inProgress: false,
                _dbObjectTypes: Map(0) {},
                _requestQueue: [],
                _osonMaxFieldNameSize: 255,
                _connectString: '(DESCRIPTION=                     (ADDRESS=(PROTOCOL=TCP)(HOST=ORA-HPD-RE7)(PORT=1521))                     (CONNECT_DATA=(SERVER=DEDICATED)(SID=HPDTEST))                   )',
                _user: 'BROWSER'
              },
              metaData: [
                {
                  name: 'INFOS',
                  dbType: DbType {
                    num: 2017,
                    name: 'DB_TYPE_CLOB',
                    columnTypeName: 'CLOB',
                    _bufferSizeFactor: 112,
                    _oraTypeNum: 112,
                    _csfrm: 1
                  },
                  nullable: true,
                  isJson: false,
                  isOson: false,
                  dbTypeName: 'CLOB',
                  fetchType: DbType {
                    num: 2017,
                    name: 'DB_TYPE_CLOB',
                    columnTypeName: 'CLOB',
                    _bufferSizeFactor: 112,
                    _oraTypeNum: 112,
                    _csfrm: 1
                  }
                }
              ],
              lobIndices: [ 0 ],
              dbObjectIndices: [],
              nestedCursorIndices: [],
              converterIndices: [],
              outFormat: 4002,
              fetchArraySize: 100,
              dbObjectAsPojo: false,
              maxRows: 0
            }
          },
          _chunkSize: 8132,
          _pieceSize: 8132,
          _length: 458,
          _type: DbType {
            num: 2017,
            name: 'DB_TYPE_CLOB',
            columnTypeName: 'CLOB',
            _bufferSizeFactor: 112,
            _oraTypeNum: 112,
            _csfrm: 1
          },
          _autoCloseLob: true,
          [Symbol(shapeMode)]: true,
          [Symbol(kCapture)]: false
        }
      }
    ]
    Nico

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    485
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 485
    Par défaut
    J'ai trouvé l'exemple avec des données géographiques ici

    Je teste le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    const sqlGet = async () => {
      let connection;
      try {
        let sql1, sql2, binds, options, result;
        connection = await oracledb.getConnection(config);
     
        console.log(connection);
        console.log(connection.isHealthy());
        const GeomType = await connection.getDbObjectClass("MDSYS.SDO_GEOMETRY");
     
    ...
    J'ai une erreur sur la ligne await connection/getDBObjectClass....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Error: ORA-24328: valeur d'attribut non autorisée
        at async Object.sqlGet (monfichierjs.js:60:22) {
      errorNum: 24328,
      offset: 0,
      code: 'ORA-24328'
    }
    Si ça peut aider, ma config :
    oracledb 6.8.0
    base de données Oracle : Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0

    Nico

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    485
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 485
    Par défaut
    Bonjour,

    Apparemment il y a eu une mise à jour récente (avril 2025) de python-oracledb pour un bug du même style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Thick Mode Changes
        Fixed bug resulting in a segfault when unable to load the Oracle Client libraries (ODPI-C dependency update).
        Fixed bug which resulted in error ORA-24328: illegal attribute value when calling Connection.gettype() with Oracle Client 11.2 libraries (ODPI-C dependency update).
        Improved error message when getting Connection.max_open_cursors when using Oracle Client 11.2 libraries (ODPI-C dependency update).
        Improved error message when attempting to work with sparse vectors using Oracle Client 23.6 (or earlier) libraries (ODPI-C dependency update).
    source : https://python-oracledb.readthedocs....ase_notes.html

    peut-être le même problème dans la librairie node ??

    PS : dans la release note de ODPI-C, on trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    10. ODPI-C Release notes
    10.1. Version 5.5.1 (March 25, 2025)
        Fixed bug resulting in a segfault when unable to load the Oracle Client libraries.
        Fixed bug which resulted in error ORA-24328: illegal attribute value when calling dpiConn_getObjectType() with Oracle Client libraries 11.2.
        Improved error message when calling dpiVector_getValue() and dpiVector_setValue() with sparse vectors and Oracle Client libraries 23.6 or earlier.
        Improved error message when calling dpiConn_getMaxOpenCursors() when using Oracle Client libraries 11.2.
    Source : https://odpi-c.readthedocs.io/en/lat...easenotes.html

    Nico

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    485
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 485
    Par défaut
    Il s'agit d'un bug dans le package, j'ai envoyé une issue sur le github ici, la correction devrait être intégrée à la prochaine release.

    Nico

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Visual Web] Problème connexion base oracle
    Par Yozol dans le forum NetBeans
    Réponses: 2
    Dernier message: 09/03/2007, 23h20
  2. probleme connexion base Oracle
    Par michelle1000 dans le forum ASP
    Réponses: 1
    Dernier message: 26/02/2007, 23h24
  3. connexion base oracle
    Par admcent dans le forum Connexions aux bases de données
    Réponses: 14
    Dernier message: 21/12/2006, 10h50
  4. Réponses: 1
    Dernier message: 07/11/2006, 15h52
  5. [Oracle] Connexion base oracle distante
    Par nicocolt dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/06/2006, 10h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo