Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#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.
Julien.
https://rjuju.github.io/
Hors 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.
Guillaume.
Hors ligne
#6 06/10/2014 19:44:31
- jplaroche
- Membre
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.
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