PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#1 02/10/2014 05:57:21

jplaroche
Membre

RESOLU descripteur schéma catalog ne fonctionne que sur pgadmin

bonjour,

SELECT
cl.table_catalog,cl.table_name,
cl.column_name,cl.ORDINAL_POSITION,cl.DATA_TYPE,cl.CHARACTER_MAXIMUM_LENGTH,cl.NUMERIC_PRECISION,cl.NUMERIC_SCALE

,(select pg_catalog.obj_description(oid) from pg_catalog.pg_class c where c.relname=cl.table_name) as table_comment

,(select pg_catalog.col_description(oid,cl.ordinal_position::int) from pg_catalog.pg_class c where c.relname=cl.table_name) as column_comment

FROM information_schema.columns cl

WHERE   cl.table_catalog='CGIFCH'  and cl.table_name='FTCPAY'
  order by 4 ;



cette requête ne marche qu'avec pgadmin III
pourquoi svp

j'aurais apprécié ne pas éclater cette requête en trois 



=============================================



après  récupération db2


résultat pgadmin
               table         field       ord   type          length    len num  len apres virgule text table       text field
"CGIFCH";"FTCPAY";"TCCPAY";1   ;"character"; 3       ;              ;                        ;"CODE PAYS";"CODE PAYS"
"CGIFCH";"FTCPAY";"TC999E";2   ;"numeric"  ;          ;8            ;0                       ;"CODE PAYS";"DATE DE CREATION ENR"   



résultat C++ ECPG

"CGIFCH";"FTCPAY";"TCCPAY";1   ;"character";3       ;              ;                        ;
"CGIFCH";"FTCPAY";"TC999E";2   ;"numeric"  ;         ;8            ;0                       ;



EXEC SQL AT pg_RTABLE DECLARE pg_RTABLE_cur CURSOR FOR
SELECT
cl.table_catalog,cl.table_name,
cl.column_name,cl.ORDINAL_POSITION,cl.DATA_TYPE,cl.CHARACTER_MAXIMUM_LENGTH,cl.NUMERIC_PRECISION,cl.NUMERIC_SCALE
,(select pg_catalog.obj_description(oid) from pg_catalog.pg_class c where c.relname=cl.table_name) as table_comment
,(select pg_catalog.col_description(oid,cl.ordinal_position::int) from pg_catalog.pg_class c where c.relname=cl.table_name) as column_comment
FROM information_schema.columns cl
WHERE cl.table_catalog =:zdbname  and cl.table_name =:zfile
ORDER BY 4 ;

EXEC SQL  AT pg_RTABLE  OPEN pg_RTABLE_cur ;

EXEC SQL  AT pg_RTABLE  FETCH pg_RTABLE_cur   INTO :zSERVER, :zTABLE, :CNAME, :CPOS, :CTYP, :CLEN, :CDEC, :CVIR, :zTEXT, CTEXT;

Dernière modification par jplaroche (06/10/2014 22:20:24)


Bonjour, Arrive de DB2  1978--à ce JOUR
pratique ECPG depuis 2013-- à ce JOUR

Hors ligne

#2 02/10/2014 13:07:24

rjuju
Administrateur

Re : RESOLU descripteur schéma catalog ne fonctionne que sur pgadmin

Qu'est-ce que vous entendez par "ne marche qu'avec pgAdmin" ? Si vous avez une erreur, merci l'indiquer qu'on puisse vous aider. S'il s'agit des champts table_comment et column_comment vides, cela ressemble plutôt à une connexion ne se faisant pas sur le bon serveur.

En ligne

#3 02/10/2014 13:21:42

jplaroche
Membre

Re : RESOLU descripteur schéma catalog ne fonctionne que sur pgadmin

bonjour,
si je met l'ordre select avec pgadmin cela fonctionne parfaitement



sans solution !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
par contre   en c++  avec EXEC SQL

j’obtiens tous sauf la partie table_comment  et  column_comment








je n'ai pas de problème pour la connexion  je traite mes tables correctement  c'est juste que je voudrais préparer mon descripteur en xml  donc récupérer la description  pour faire mes fichiers xml  et automatiser des procédures lier avec CGI

d'ailleurs tu peux coller l'ordre dans PGADMINIII en chg MA_BDNAME e tMA_TABLE ça fonctionne parfaitement
SELECT
cl.table_catalog,cl.table_name,
cl.column_name,cl.ORDINAL_POSITION,cl.DATA_TYPE,cl.CHARACTER_MAXIMUM_LENGTH,cl.NUMERIC_PRECISION,cl.NUMERIC_SCALE
,(select pg_catalog.obj_description(oid) from pg_catalog.pg_class c where c.relname=cl.table_name) as table_comment
,(select pg_catalog.col_description(oid,cl.ordinal_position::int) from pg_catalog.pg_class c where c.relname=cl.table_name) as column_comment
FROM information_schema.columns cl
WHERE cl.table_catalog ='MA_BDNAME'  and cl.table_name ='MA_TABLE'

Dernière modification par jplaroche (03/10/2014 14:55:02)


Bonjour, Arrive de DB2  1978--à ce JOUR
pratique ECPG depuis 2013-- à ce JOUR

Hors ligne

#4 02/10/2014 13:28:25

jplaroche
Membre

Re : RESOLU descripteur schéma catalog ne fonctionne que sur pgadmin

ps je suis en accès full en développement interne en prise direct sous linux

char *prod       = "unix:postgresql://localhost:5432/CGIFCH";

la connexion est excellente

EXEC SQL CONNECT TO :prod AS pg_RTABLE USER :user USING :using  ;

etc...
j'essaye de te donner un max d'info

merci


Bonjour, Arrive de DB2  1978--à ce JOUR
pratique ECPG depuis 2013-- à ce JOUR

Hors ligne

#5 03/10/2014 19:38:09

gleu
Administrateur

Re : RESOLU descripteur schéma catalog ne fonctionne que sur pgadmin

La requête fonctionne avec pgAdmin et psql. Donc le problème vient de votre programme.

Hors ligne

#6 06/10/2014 19:44:31

jplaroche
Membre

Re : RESOLU descripteur schéma catalog ne fonctionne que sur pgadmin

gleu a écrit :

La requête fonctionne avec pgAdmin et psql. Donc le problème vient de votre programme.

merci alors aidé moi ???

EXEC SQL BEGIN DECLARE SECTION;

/* $FIELD  */

char*     nzdbname   ;      /* connection user name */
char*     nzfile     ;    /* connection user name */
char*     nzSERVER   ;
char*     nzTABLE    ;
char*     nCNAME     ;
int       nCPOS      ;   /* Position */
char*     nCTYP      ;
int       nCLEN      ;   /* Longueur zone alpha */
int       nCDEC      ;   /* ENTIER */
int       nCVIR      ;   /* NBR CHIFFRE APRES VIRGULE */
char*     nzTEXT     ;   /* texte Table */
char*     nCTEXT     ;   /* texte de la Colonne */

int       nCOL       ;   /* n° Col index description */

EXEC SQL END DECLARE SECTION;

void db_read_RTABLE()
{
   nCPOS    = 0;
   nCDEC    = 0;
   nCLEN    = 0;
   nCVIR    = 0;
nzSERVER  =   (char*) malloc( 256   * sizeof(char*));
nzTABLE  =   (char*) malloc( 256   * sizeof(char*));
nCNAME  =   (char*) malloc( 256   * sizeof(char*));
nCTYP  =   (char*) malloc( 256   * sizeof(char*));
nzTEXT  =   (char*) malloc( 256   * sizeof(char*));
nCTEXT  =   (char*) malloc( 256   * sizeof(char*));


EXEC SQL AT pg_RTABLE DECLARE pg_RTABLE_cur CURSOR FOR
SELECT
cl.table_catalog,cl.table_name,
cl.column_name,cl.ORDINAL_POSITION,cl.DATA_TYPE,cl.CHARACTER_MAXIMUM_LENGTH,cl.NUMERIC_PRECISION,cl.NUMERIC_SCALE
,(select pg_catalog.obj_description( oid) from pg_catalog.pg_class c where c.relname=cl.table_name) as table_comment

,(select pg_catalog.col_description( oid,cl.ORDINAL_POSITION::int) from pg_catalog.pg_class cx where cx.relname=cl.table_name) as column_comment
FROM information_schema.columns cl
WHERE cl.table_catalog =:nzdbname  and cl.table_name =:nzfile
ORDER BY 4 ;

EXEC SQL  AT pg_RTABLE  OPEN pg_RTABLE_cur ;


EXEC SQL WHENEVER SQLERROR CONTINUE ;
EXEC  SQL WHENEVER NOT FOUND DO BREAK;
while (1)
{

EXEC SQL  AT pg_RTABLE  FETCH pg_RTABLE_cur   INTO :nzSERVER, :nzTABLE, :nCNAME, :nCPOS, :nCTYP, :nCLEN, :nCDEC, :nCVIR , :nzTEXT, :nCTEXT;

fprintf(stderr, "\n db_read_RTABLE \n  zSERVER: %s \n  zTABLE: %s \n zNAME: %s \n CPOS: %d \n CTYP: %s \n CLEN: %d \n CDEC: %d \n  CVIR: %d \n zTEXT: %s \n CTEXT: %s \n",
nzSERVER, nzTABLE, nCNAME, nCPOS, nCTYP, nCLEN, nCDEC, nCVIR, nzTEXT, nCTEXT);

return;
};

}


resultat

db_read_RTABLE
  zSERVER: CGIFCH
  zTABLE: FTCPAY
zNAME: TCCPAY
CPOS: 1
CTYP: character
CLEN: 3
CDEC: 0
  CVIR: 0
zTEXT: 
CTEXT: 


donc pas de recuperation des comment alors que sous pgadmin cela fonctionne

ok c'est le programme mais y a t-il quelqu'un qui peux me dire OU !!!!!!!!!!!!!!!


Bonjour, Arrive de DB2  1978--à ce JOUR
pratique ECPG depuis 2013-- à ce JOUR

Hors ligne

#7 06/10/2014 22:19:40

jplaroche
Membre

Re : RESOLU descripteur schéma catalog ne fonctionne que sur pgadmin

j'ai trouvé

a) je maintiens que la fonction ne fonctionne pas tel que décrite sous pgadmin et ecpg dans la doc.



b) la réponse  pour que les deux fonctionne

EXEC SQL AT pg_RTABLE DECLARE pg_RTABLE_cur CURSOR FOR
select
     cl.table_catalog
    ,cl.table_name
    ,d.description
    ,cl.column_name
    ,e.description
    ,cl.ORDINAL_POSITION
    ,cl.DATA_TYPE
    ,coalesce(cl.CHARACTER_MAXIMUM_LENGTH,0)
    ,coalesce(cl.NUMERIC_PRECISION,0)
    ,coalesce(cl.NUMERIC_SCALE,0)




from
    information_schema.columns cl ,
    pg_catalog.pg_attribute a
    inner join pg_catalog.pg_class c on a.attrelid = c.oid,
    pg_catalog.pg_description d,
    pg_catalog.pg_description e
where
    cl.table_catalog =:nzdbname
    and c.relname =:nzfile
    and a.attnum > 0
    and a.attisdropped is false
    and pg_catalog.pg_table_is_visible(c.oid)
    and cl.table_name  = c.relname
    and cl.ORDINAL_POSITION = a.attnum
    and d.objoid = a.attrelid
    and d.objsubid = 0
    and e.objoid = a.attrelid
    and e.objsubid = a.attnum
order by a.attnum;

EXEC SQL  AT pg_RTABLE  OPEN pg_RTABLE_cur ;




EXEC SQL  AT pg_RTABLE  FETCH pg_RTABLE_cur   INTO   :nzSERVER, :nzTABLE, :nzTEXT , :nCNAME, :nCTEXT, :nCPOS, :nCTYP, :nCLEN, :nCDEC, :nCVIR ;

fprintf(stderr, "\n db_read_RTABLE \n  zSERVER: %s \n  zTABLE: %s \n zTEXT: %s \n zNAME: %s \n  CTEXT: %s \n CPOS: %d \n CTYP: %s \n CLEN: %d \n CDEC: %d \n  CVIR: %d \n ",
nzSERVER, nzTABLE, nzTEXT, nCNAME, nCTEXT, nCPOS, nCTYP, nCLEN, nCDEC, nCVIR);


là ça fonctionne

je souhaite que cela serve pour les autres

pour info


EXEC SQL BEGIN DECLARE SECTION;

/* $FIELD  */

char*     nzdbname   ;      /* connection user name */
char*     nzfile     ;           /* connection user name */
char*     nzSERVER   ;
char*     nzTABLE    ;
char*     nCNAME     ;
int       nCPOS      ;          /* Position */
char*     nCTYP      ;
int       nCLEN      ;          /* Longueur zone alpha */
int       nCDEC      ;         /* ENTIER */
int       nCVIR      ;          /* NBR CHIFFRE APRES VIRGULE */
char*     nzTEXT     ;       /* texte Table */
char*     nCTEXT     ;      /* texte de la Colonne */
int       nCCOL      ;         /* Nbr colonne */
int       nCKEY      ;         /* Nbr key  */

EXEC SQL END DECLARE SECTION;

attention ne pas oublier
    ,coalesce(cl.CHARACTER_MAXIMUM_LENGTH,0)
    ,coalesce(cl.NUMERIC_PRECISION,0)
    ,coalesce(cl.NUMERIC_SCALE,0)
sino error (les valeurs sont NULL donc les forcer a zeros )

pour donner ce résultat:

<?xml version="1.0" encoding="UTF-8"?>
<FILE>
    <ENTETE>
        <VERSION>20170217144517</VERSION>
        <SERVEUR>CGIFCH</SERVEUR>
        <TABLE>FC0CLI</TABLE>
        <TEXT>CLIENT FACTURATION</TEXT>
        <NBRCOL>031</NBRCOL>
        <NBRKEY>001</NBRKEY>
    </ENTETE>
    <ZONED>
        <row NAME="C0CDEP" TEXT="CODE DEPARTEMENT" ORD="1" TYP="character" LEN="3" ENT="0" DEC="0" LNG="3"/>
        <row NAME="C0CFAC" TEXT="CODE FACTURATION" ORD="2" TYP="character" LEN="1" ENT="0" DEC="0" LNG="1"/>
        <row NAME="C0CJRD" TEXT="CODE FORME JURIDIQUE" ORD="3" TYP="character" LEN="4" ENT="0" DEC="0" LNG="4"/>
        <row NAME="C0CPAY" TEXT="CODE PAYS" ORD="4" TYP="character" LEN="3" ENT="0" DEC="0" LNG="3"/>
        <row NAME="C0CRGI" TEXT="CODE REGION ECONOMIQ" ORD="5" TYP="numeric" LEN="0" ENT="2" DEC="0" LNG="3"/>
        <row NAME="C0CRGL" TEXT="CODE REGLEMENT" ORD="6" TYP="numeric" LEN="0" ENT="3" DEC="0" LNG="4"/>
        <row NAME="C0CST1" TEXT="CODE REGION  STAT." ORD="7" TYP="numeric" LEN="0" ENT="2" DEC="0" LNG="3"/>
        <row NAME="C0CST2" TEXT="CODE SECTEUR STAT." ORD="8" TYP="numeric" LEN="0" ENT="2" DEC="0" LNG="3"/>
        <row NAME="C0CTRS" TEXT="CODE TRESORERIE" ORD="9" TYP="numeric" LEN="0" ENT="2" DEC="0" LNG="3"/>
        <row NAME="C0CTTV" TEXT="CODE TVA EXO EXPORT" ORD="10" TYP="character" LEN="1" ENT="0" DEC="0" LNG="1"/>
        <row NAME="C0999E" TEXT="DATE DE CREATION ENR" ORD="11" TYP="date" ENT="0" DEC="0" LNG="8" LEN="8"/>
        <row NAME="C0999M" TEXT="DATE DE MODIFCATION" ORD="12" TYP="date" ENT="0" DEC="0" LNG="8" LEN="8"/>
        <row NAME="C0NARR" TEXT="N. ARRONDISSEMENT" ORD="13" TYP="numeric" LEN="0" ENT="3" DEC="0" LNG="4"/>
        <row NAME="C0NCLI" TEXT="N° CLIENT" ORD="14" TYP="numeric" LEN="0" ENT="6" DEC="0" LNG="7"/>
        <row NAME="C0NPTT" TEXT="N. CODE POSTAL" ORD="15" TYP="numeric" LEN="0" ENT="5" DEC="0" LNG="6"/>
        <row NAME="C0NESC" TEXT="N. ESCOMPTE" ORD="16" TYP="numeric" LEN="0" ENT="2" DEC="1" LNG="3"/>
        <row NAME="C0SHS" TEXT="0/1  N=0 O=1 H.SERVICE" ORD="17" TYP="numeric" LEN="0" ENT="1" DEC="0" LNG="2"/>
        <row NAME="C0SLCR" TEXT="O/N  L.C.R." ORD="18" TYP="character" LEN="1" ENT="0" DEC="0" LNG="1"/>
        <row NAME="C0SMLG" TEXT="O/N MAILING" ORD="19" TYP="character" LEN="1" ENT="0" DEC="0" LNG="1"/>
        <row NAME="C0TRPL" TEXT="TYPE BLOCAGE RAPPEL" ORD="20" TYP="character" LEN="1" ENT="0" DEC="0" LNG="1"/>
        <row NAME="C0ZPTT" TEXT="Z. CODE POSTAL" ORD="21" TYP="character" LEN="10" ENT="0" DEC="0" LNG="10"/>
        <row NAME="C0ZCTC" TEXT="PERSONNE A CONTACTER" ORD="22" TYP="character" LEN="30" ENT="0" DEC="0" LNG="30"/>
        <row NAME="C0ZDST" TEXT="PERSONNE DESTINATAIR" ORD="23" TYP="character" LEN="30" ENT="0" DEC="0" LNG="30"/>
        <row NAME="C0ZNOM" TEXT="NOM / RAISON SOCIAL" ORD="24" TYP="character" LEN="30" ENT="0" DEC="0" LNG="30"/>
        <row NAME="C0ZOBS" TEXT="OBSERVATIONS" ORD="25" TYP="character" LEN="30" ENT="0" DEC="0" LNG="30"/>
        <row NAME="C0ZTVA" TEXT="REFERENCE TVA" ORD="26" TYP="character" LEN="15" ENT="0" DEC="0" LNG="15"/>
        <row NAME="C0ZRU1" TEXT="NOM / RUE1" ORD="27" TYP="character" LEN="30" ENT="0" DEC="0" LNG="30"/>
        <row NAME="C0ZRU2" TEXT="SUITE NOM / RUE1" ORD="28" TYP="character" LEN="30" ENT="0" DEC="0" LNG="30"/>
        <row NAME="C0ZTL1" TEXT="N. TEL. PERS. A CONT" ORD="29" TYP="character" LEN="15" ENT="0" DEC="0" LNG="15"/>
        <row NAME="C0ZTLX" TEXT="N. TELEX / TELECOPIE" ORD="30" TYP="character" LEN="15" ENT="0" DEC="0" LNG="15"/>
        <row NAME="C0ZVIL" TEXT="VILLE" ORD="31" TYP="character" LEN="25" ENT="0" DEC="0" LNG="25"/>
    </ZONED>
    <ZONEK>
        <row NAME="C0NCLI" ORD="1" TYP="numeric" LEN="0" ENT="6" DEC="0" LNG="7"/>
    </ZONEK>
</FILE>

Dernière modification par jplaroche (20/03/2017 21:55:15)


Bonjour, Arrive de DB2  1978--à ce JOUR
pratique ECPG depuis 2013-- à ce JOUR

Hors ligne

Pied de page des forums