Vous n'êtes pas identifié(e).

#1 Re : C et C++ » Problème d’exécution d’un progamme ecpg (postgresql 8.4.10 ) » 11/06/2012 10:01:00

Merci pour les informations et les précisions.

Pour la communauté, le code corrigé et testé a partir des informations données par Monsieur  "dverite".

EXEC SQL BEGIN DECLARE SECTION;
/* calcul la date de creation du message dans la table */
    const char *select_timestamp = "SELECT ( now()- ? * '1 day'::interval )::varchar";
EXEC SQL END DECLARE SECTION;

memset(timestamp_d,    '\0', TAILLE_BUFFER);
memset(date,    '\0', TAILLE_BUFFER);
sprintf(date,"%s",360);

EXEC SQL WHENEVER SQLERROR SQLPRINT
EXEC SQL PREPARE stmt_select_timestamp     FROM :select_timestamp;
EXEC SQL EXECUTE stmt_select_timestamp     INTO :timestamp_d USING :date;
EXEC SQL DEALLOCATE PREPARE stmt_select_timestamp;
timestamp_d[11] = NUL;

#2 C et C++ » Problème d’exécution d’un progamme ecpg (postgresql 8.4.10 ) » 08/06/2012 16:56:11

mderf
Réponses : 3

Problème d’exécution d’un programme ecpg  (postgresql 8.4.10 serveur red hat enterprise 5.3 64 bit ).

Bonjour,
J’ai un problème dû à la migration d’une base de données 8.2.4 vers 8.4.10.
Le problème se situe au niveau d’un programme C incluant du sql en un mot  ECPG
La  compilation du programme est OK.

Lors de l’exécution de mon programme j ai un bug :
         SQL error: syntax error at or near "$1" on line 367
         SQL error: too many arguments on line 368
         SQL error: invalid statement name "stmt_select_timestamp" on line 369


ci-dessous les lignes de code incriminées :
        EXEC SQL BEGIN DECLARE SECTION;
        /* calcul la date de creation du message dans la table */
      const char *select_timestamp = "SELECT ( now()- interval ? )::varchar";
        EXEC SQL END DECLARE SECTION;

    memset(timestamp_d,    '\0', TAILLE_BUFFER);
    memset(date,    '\0', TAILLE_BUFFER);
    sprintf(date,"    %s days",360);


    EXEC SQL WHENEVER SQLERROR SQLPRINT
      EXEC SQL PREPARE stmt_select_timestamp     FROM :select_timestamp;
    EXEC SQL EXECUTE stmt_select_timestamp     INTO :timestamp_d USING :date;
      EXEC SQL DEALLOCATE PREPARE stmt_select_timestamp;
      timestamp_d[11] = NUL;

Pied de page des forums

Propulsé par FluxBB