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

SQL Oracle Discussion :

ORA-01036: illegal variable name/number


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 79
    Points
    79
    Par défaut ORA-01036: illegal variable name/number
    Bonjour

    J'ai une application qui utilise une base de données ORACLE en passant par des driver ODBC. Pour les cles primaires j'utilise les sequence. Jusque la tout va bien.

    J'ai besoin de pouvoir inserer des données dont je connais deja la valeur de la cles primaire, donc il faut que je mette a jour la valeur de la clef primaire. Pour ca un drop suivi d'un create de la sequence, ca marche... mais pas tout le temps:

    quand je veux remettre ma base de donnée a 0, je fais un drop sur toutes mes tables, puis un drop et un create sur toutes les sequences :
    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
     
    begin_transaction();
     
    auto_ptr<odbc::PreparedStatement> remoteFolderStm(con->prepareStatement("DELETE FROM RemoteFolder"));
    auto_ptr<odbc::PreparedStatement> channelFolderStm(con->prepareStatement("DELETE FROM ChannelFolder"));
    [...]		
    remoteFolderStm->executeUpdate();
    channelFolderStm->executeUpdate();
    [...]
    remoteFolderStm->close();
    channelFolderStm->close();
    [...]
    auto_ptr<odbc::PreparedStatement> remoteFolderDropSecStm(con->prepareStatement("DROP sequence sq_RemoteFolder_idRemoteFolder"));
    auto_ptr<odbc::PreparedStatement> channelFolderDropSecStm(con->prepareStatement("DROP sequence sq_ChannelFolder_idChannelFold"));
    [...]
    remoteFolderDropSecStm->executeUpdate();
    channelFolderDropSecStm->executeUpdate();
    [...]
    remoteFolderDropSecStm->close();
    channelFolderDropSecStm->close();
    [...]
    auto_ptr<odbc::PreparedStatement> remoteFolderCreaSecStm(con->prepareStatement("CREATE sequence sq_RemoteFolder_idRemoteFolder start WITH 1 increment BY 1"));
    auto_ptr<odbc::PreparedStatement> channelFolderCreaSecStm(con->prepareStatement("CREATE sequence sq_ChannelFolder_idChannelFold start WITH 3 increment BY 1"));
    [...]
    remoteFolderCreaSecStm->executeUpdate();
    channelFolderCreaSecStm->executeUpdate();
    [...]
    remoteFolderCreaSecStm->close();
    channelFolderCreaSecStm->close();
     
    commit_transaction();
    Ca ca marche très bien.

    Mais que je veux ajouter des elements, je fais ca :
    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
     
    int DataSource_ODBC_ORACLE::add_Remote_Folders(Data &in)
    {
        SOM_TRACE(ACE_TEXT("DataSource_ODBC_ORACLE::add_Remote_Folders()"));
        ACE_READ_GUARD_RETURN(DBMUTEX, guard, mutex_, -1);
     
        int id, nmb;
        UnicodeString name, path;
     
    	in >> nmb;
     
        try{
     
            begin_transaction();
     
        	auto_ptr<odbc::PreparedStatement> stmt(con->prepareStatement(("INSERT INTO RemoteFolder (idRemoteFolder, name, path) VALUES (?, ?, ?)")));
            for (int i = 0; i < nmb; i++) {
     
            	in >> id >> name >> path;
     
            	stmt->setInt(1, id);
            	stmt->setString(2, strToUTF8(name));
    	        stmt->setString(3, strToUTF8(path));
     
    	        stmt->executeUpdate();
            }
     
        	// mise a jour de la sequence
            auto_ptr<odbc::PreparedStatement> ps(con->prepareStatement("SELECT idRemoteFolder FROM RemoteFolder ORDER BY idRemoteFolder DESC"));
            auto_ptr<odbc::ResultSet> rs(ps->executeQuery());
            if (rs->next()) {
    			int result = rs->getInt(1);
    			auto_ptr<odbc::PreparedStatement> dropSecStm(con->prepareStatement("DROP sequence sq_RemoteFolder_idRemoteFolder"));
                dropSecStm->executeUpdate();
    			dropSecStm->close();
     
                result += 1;
                auto_ptr<odbc::PreparedStatement> creaSecStm(con->prepareStatement("CREATE sequence sq_RemoteFolder_idRemoteFolder start WITH ? increment BY 1"));
    			creaSecStm->setInt(1, result);
    			creaSecStm->executeUpdate();
    			creaSecStm->close();
            }
            ps->close();
     
            commit_transaction();
     
            stmt->close();
        } catch (CppSQLite3Exception &e) {
            rollback_transaction();
            ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("-%D Monitor: DataSource exception: %s\n"), e.errorMessage()), -1);
        } catch (std::out_of_range &e) {
            rollback_transaction();
        	ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("-%D Monitor: add_Remote_Folders() out of range: %s\n"), e.what()), -1);
        } catch (std::exception &e) {
            rollback_transaction();
            ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("-%D Monitor: add_Remote_Folders() User command error: %s\n"), e.what()), -1);
        }
        return 0;
    }
    et j'ai cette erreur que je n'arrive pas a reproduire dans le client ORACLE:
    User command error: Error executing "CREATE sequence sq_RemoteFolder_idRemoteFolder start WITH ? increment BY 1": [OpenLink][ODBC][Oracle Server]ORA-01036: illegal variable name/number
    Pour le ?, ce n'est pas ca le problem, le bind est bien fait, j'ai pu verifier, et si on execute cette requette avec le ? dans le client ORACLE on a pas la meme erreur

    Est ce que qq un a une idée d'ou pourait venir le probleme? je ne suis pas un expert en ORACLE.

    Merci

    A bientot

  2. #2
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 134
    Points : 84
    Points
    84
    Par défaut
    Tu as essayé de remplacer le ? par 1 par exemple ?

Discussions similaires

  1. ORA-01036: numéro/nom de variable interdit
    Par cnguyen dans le forum SQL
    Réponses: 11
    Dernier message: 25/03/2010, 16h01
  2. Erreur ORA-01036 - numéro/nom de variable interdit
    Par Daikyo dans le forum Windows Forms
    Réponses: 1
    Dernier message: 11/06/2008, 02h25
  3. Problème Oracle [ora-01036 illegal variable name/number]
    Par Aumélisse dans le forum ASP.NET
    Réponses: 7
    Dernier message: 14/08/2007, 12h36
  4. [ORACLE 8i] ORA-01036 / oci bind by name pour string
    Par mrfred dans le forum Interfaces de programmation
    Réponses: 7
    Dernier message: 02/08/2007, 12h11
  5. Réponses: 7
    Dernier message: 17/10/2006, 13h55

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