![]()
Documentation 22/05/2002 Puech Dominique Météo-France CNRM/GMAP/OBS![]()
I.1. Ouverture de la base
I.2. Lecture de vue(s)
I.3. Fermeture de la base
I.4. Les pointeurs
I.5. Les modules odbII.1. Ouverture de la base
II.2. Lecture de vue(s) avec getdb
II.3. call ctxprint(...)
II.4. options "debug"
II.4.1. ODB_TRACE_*
II.4.2. ODB_DEBUGExécution
III.1. Problème au opendb
III.2. Problems in CTXGETDB with column indices of view="xxx"
III.3. Linking failed for VIEW="xxx"
III.4. Unable to obtain context id for "xxx"
Compilation
III.5. undeclared identifier `K1_len`IV.2. Run sur une base de cycle différent
V.1. ctxinitdb.F90
V.2. divers
ihandle=ODB_open('type_base','option',inbpool)
ou
call opendb('type_base','option',info,infolen)type_base = 'ECMA', 'CCMA' ou 'ECMASCR'
option = 'NEW','CREATE' ; 'OLD','R/W','READ WRITE','READWRITE','READ/WRITE' ;
'R/O','READONLY','READ','READ ONLY','READ/ONLY','R' ;
'*','UNKNOWN','UPDATE','APPEND','ADD','WRITE','W','A'1) avec USE ODB, ONLY : ODB_open
retour -> inbpool=nb de pool ihandle=numéro de base2) retours infolen >=1 info(1)=nb de pool
infolen >=2 info(2)=max(ihandle,$nmxupd)
ihandle -> NHANDLEDB(1) (yomdb)irc=ODB_addview(ihandle,'nom_vue_x')
do jp=1,inbpool
irc=ODB_select(ihandle,'nom_vue_x',nrows,ncols,nra,pollno=jp)
allocate(tab_x(nrows,0:ncols))
irc=ODB_get(ihandle,'nom_vue_x',tab_x,nrows,pollno=jp)
irc=ODB_put(ihandle,'manda_update',ROBODY,nbval,poolno=jp) pour sauvegarde
irc=ODB_store(ihandle,poolno=jp) " "
irc=ODB_cancel(ihandle,'nom_vue_x',pollno=jp)
irc=ODB_swapout(ihandle,'*',poolno=jp)
enddo
ou
call getdb('nom_contexte',iversion,iret,info,0,zinfo,0,iset,islot,ipool,iobstype,icodetype)
call putdb('nom_contexte',iversion,iret,info,0,zinfo,0)lecture de table
call getatdb('@nom_table',-1,info,n) n=2 ou 3 selon les tables
call putatdb('@nom_table',-1,info,n) n=2 ou 3 selon les tables1) ODB_addview input ihandle
retour irc = numéro informatique de vue
ODB_select input ihandle, ipool
retour irc = nrows = nb de lignes
ncols = nb de colonnes
nra = nrows + mod(nrows+1,2)
ODB_get input ihandle, nom_vue_x, nrows
retour les données dans le tableau tab_x
ODB_cancel input ihandle, nom_vue_x2) Cet appel implique une définition de contexte dans ctxinitdb.F90 (odb/odbport)
Le contexte contenant une ou plusieurs vues
----------------------------------------------------------------
if (cdretr == 'nom_contexte') then
CALL next_context('nom_vue', version=x)
do it=1,inumt
ctx(idctx,it)%view(1)%name = 'nom_vue_1'
ctx(idctx,it)%view(1)%ncase = JPCASE_ROBHDR
!x eventuellement !x
ctx(idctx,it)%view(2)%name = 'nom_vue_2'
ctx(idctx,it)%view(2)%ncase = JPCASE_ROBODY
.....
enddo
endif
----------------------------------------------------
nom_contexte nom d'appel dans getdb
nom_vue_x nom dans requête sql (CREATE VIEW nom_vue_x AS)
version numéro de version
JPCASE_ROBHDR récupération des données sur un tableau ROBHDR(:,:)input
nom_contexte, iversion
iset, islot, ipool, iobstype, icodetype : initialisation à -1 -> pas de test
ex d'utilation WHERE (($tslot == -1 AND tslot > 0) OR (tslot == $tslot))output
iret = nb de lignes retournées
aucun retour sur info, zinfo
ROBHDR(ilig,0:icol) -> nom du tableau indiqué dans ctxinitdb (JPCASE_ROBHDR)
ilig = iret + mod(iret+1,2)irc=ODB_close(ihandle[,save=ldsave])
irc=ODB_end()
ou
call closedb('type_base',ldsave)ldsave=.true. -> sauvegarde des modifications
1) ldsave=.false. implicitementODB_getnames récupération de noms
irc=ODB_getnames(ihandle,'nom_vue','name') -> irc=nb de colonnes de la vue
irc=ODB_getnames(ihandle,'nom_vue','name',clvar)
ihandle : numéro base cf ODB_open
name : option
-> irc=nb de colonnes de la vue
-> clvar*128 -> liste des noms de colonnes
utilisation avec 'table' -> idem avec noms des tablescmdb_reg enregistrement de noms de colonnes
call cmdb_reg('lat@hdr','MDBLAT',MDBLAT,it,irc)
it : cf itdef.h
-> irc = numéro d'enregistrementcmdb_name récupération du nom et "numéro" de pointeur
call cmdb_name('lat@hdr',chaine,irc)
-> chaine='MDBLAT'
-> irc = numéro d'enregistrement cf cmdb_reg
II. Les impressions -extraits de listings-
sortie standard impression de ODB_open
MPL_INIT : MPL_METHOD=JP_BLOCKING_STANDARD
MPL_INIT : MAILBOX SIZE= 32000000sortie erreur
1 : OPENDB("ECMA") impression de opendbimpression de ODB_open
***Warning: Assuming static linking mode
OPEN_DB: handle= 1
DataBase-name="ECMA"
inuse ? T
newdb ? F
readonly ? T
no. of global pools = 1
no. of local pools = 1
sequence no. scaling factor = 1073741824
max. no. of rows per pool = 1073741823
iounit = 0
ntables = 23
END of OPEN_DBimpression de opendb
1 1 : Allocating o_(:)-structure with inumt = 1 elements
1 1 : size(o_),shape(o_)= 1 1
UNMAPDB: ODB_UNDEF from 0x8B8B8B8B to 0x8B8B8B8B
*** OBSPROC_INIT ***
0NUMERICAL CONSTANTS SETUPsortie standard aucune
sortie erreur avec getdb
ADDVIEWDB("nom_vue_1" : db="ECMA") : total#, dbhandle, viewhandle = 1 1 10311
ADDVIEWDB("nom_vue_2" : db="ECMA") : total#, dbhandle, viewhandle = 2 1 11367
call ctxprint(1,'commentaire personnel','type_base')
type_base = ECMA, ECMASCR, CCMA
entre le opendb et closedbexemple
---------------------------------------------------------------------
ctxprint: essai_print ECMA
NMAXCTX,NMAXCTX_ALLOC,shape(ctx)= 4 201 201 1
=== Thread# 1 ===
2, master# 1, hash#= 120, version#= 1, db="ECMA", retr="MANDALAY"
PEvar="", active ? T, pool# -1, replicate_PE= 0, # of views= 1
1 "manda_laelalo" : 10311 (irc de addview)
execute=T, processed=T, cancel=F, putdb=T, swapout=F, update_col_flip=F
shared_idx= 0, shared_arr= 0, h2b= 0, h2sat= 0, ncase= 3
***** "ROBODY " nra= 199999 nrows= 199998 ncols= 5 nghost= 0
kset= 2147483647 tslot= 2147483647 obstype= 2147483647 codetype=2147483647
hdr_min= 2147483647 hdr_max= 2147483647 all= 2147483647
Created : 20020619 142635.560 Last Select : 20020619 142637.774
Last Get : 20020619 142637.805 : call count = 1
colname( 1, update ? F)="lon@hdr" i.e. MDBLON = 1 (noms des pointeurs
colname( 2, update ? F)="lat@hdr" i.e. MDBLAT = 2 et rang dans le tableau )
colname( 3, update ? F)="obstype@hdr" i.e. MDBOTP = 3
colname( 4, update ? F)="obschar@hdr" i.e. MDBOCH = 4
colname( 5, update ? F)="ident@hdr" i.e. MDB_ident_AT_hdr = 5
1: ROBODY : 1199994 199999 (nra) 6 (0:ncols)
---------------------------------------------------------------------Instructions suivantes dans la procédure d'exécution
export ODB_TRACE_PROC=-1 (tous les procs) ou numéro proc
export ODB_TRACE_FILE=List_odb (1 seul fichier global)
ou
export ODB_TRACE_FILE=List_odb.% (indicé par proc)
export ODB_TRACE_FLUSH_FREQ=1 (vidage des i/o)exemple de sortie
---------------------------------------------------------------------
20020620 074318: 136.0M 0.0M 0.00 0.13 : Tracing started on PE#1, pid=1604452387 [thread#1].
>> Library compiled on Apr 5 2002 13:52:22
20020620 074318: [#1] = = 0.00 0.13 > 1 ODB_open:ECMA:READONLY
20020620 074318: [#1] 136.1M 0.0M 0.02 0.13 : Added '$nmxupd' at 0x80aef00, value=3, db=ECMA : hash#42
***** Added '$mdi' at 0x80aef08, value=2147483647, db=ECMA : hash#32
***** Added '$synop' at 0x80aef10, value=1, db=ECMA : hash#71
......
***** Added '$bg' at 0x80af280, value=1, db=ECMA : hash#31
***** Added '$adj' at 0x80af288, value=2, db=ECMA : hash#101
***** 1 ODB_open:ECMA:READONLY 1
***** 1 GETDB(MANDALAY) 1 0 -1 -1 -1 -1 -1
***** 1 ODB_addview:manda_laelalo
***** 1 ODB_addview:manda_laelalo 10311
***** 1 ODB_getsize:manda_laelalo 1 0 0 5 1
***** 1 ODB_select:manda_laelalo
***** 1 Loading TABLE hdr 1
***** 1 TABLE hdr loaded 1 199998 36 199998 16311492
***** 1 Some tables in {hdr} loaded on demand for 'manda_laelalo' -1 1 16311492
***** 1 PrS -1 1 0
***** 1 PrS -1 1 199998
***** 1 PoS -1 1 0
***** 1 PoS -1 1 199998
***** 1 ODB_select:manda_laelalo 199999 199998 5
***** 1 ODB_dget:manda_laelalo 199999 199998 5
***** restore_peinfo: vhandle=10311, found=0x0, repl_PE=0, npes=0
***** 1 Fetching 'lon@hdr' in view 'manda_laelalo' 1 0 0 199998 199999 199999 0
***** 1 Fetching 'lat@hdr' in view 'manda_laelalo' 1 1 0 199998 199999 199999 0
***** 1 Fetching 'obstype@hdr' in view 'manda_laelalo' 1 2 0 199998 199999 199999 1
***** 1 Fetching 'obschar@hdr' in view 'manda_laelalo' 1 3 0 199998 199999 199999 0
***** 1 Fetching 'ident@hdr' in view 'manda_laelalo' 1 4 0 199998 199999 199999 1 ***** 1 ODB_dget:manda_laelalo
***** 1 GETDB(MANDALAY) 1 199998 -1 -1 -1 -1 -1 1 2
***** 1 ODB_close:ECMA 0
***** 1 TABLE hdr swapped out 1 36 36 17487668
***** 1 ODB_close:ECMA 0
***** Tracing finished on PE#1, pid=1604452387 [thread#1].
---------------------------------------------------------------------Instructions suivantes dans la procédure d'exécution
export ODB_DEBUG=1exemple de sortie
---------------------------------------------------------------------
OPENDB("ECMA") --> 1
codb_print_vars_: OPENDB("ECMA")
codb_print_vars_: hashsize=200, hashmin=0, hashmax=199, hashtable at 0x87f00a0
hash#0 [hit#1] : db='ECMA', symbol='$tgtg', view='(nil)' : value=73 at 0x80af070
hash#1 [hit#1] : db='ECMA', symbol='$ts', view='(nil)' : value=11 at 0x80aeff8
....
hash#195 [hit#1] : db='ECMA', symbol='$u10m', view='(nil)' : value=41 at 0x80af158
hash#199 [hit#1] : db='ECMA', symbol='$cllqw', view='(nil)' : value=123 at 0x80af178
codb_print_vars_: Total 114 hits in 90 hash-entries
*** addviewdb("manda_laelalo") : 1 1 F
"manda_laelalo" : handle = 1
lon@hdr => 1
lat@hdr => 2
obstype@hdr => 3
obschar@hdr => 4
ident@hdr => 5
---------------------------------------------------------------------
indices : vérifier l'existance de la base
vérifier "export ioassign " et cohérence avec base
vérifier les export *PATH*
III.2. Problems in CTXGETDB with column indices of view="xxx"
-------------------------------------------------------------------------
20010801 063918: = = 500.55 225.90 > 1 Loading TABLE rtovs_body 1
20010801 063918: = = 500.64 225.90 < 1 TABLE rtovs_body loaded 1 30 2 30 92
20010801 063918: = = 500.64 225.90 : 1 Some tables in {index,hdr,sat,rtovs,rtovs_body}
loaded on demand for 'satbody_screen_rtovs' -1 1 92
20010801 063918: = = 500.64 225.90 > 1 PrS -1 1 0
20010801 063918: = = 500.64 225.90 < 1 PrS -1 1 30
20010801 063918: = = 500.64 225.90 > 1 PoS -1 1 0
20010801 063918: = = 500.64 225.90 < 1 PoS -1 1 30
20010801 063918: = = 500.64 225.90 : '$kset' at 0x8c1d498, db=ECMA, (old,new)=(1,0)
[satbody_screen_rtovs] : hash#111
ADDVIEWDB("ecset") : total#, dbhandle, viewhandle = 11 1 17031
*** Problems in CTXGETDB with column indices of view="robody_traj_2"
2 : hires_3@update : column# 0
------------------------------------------------------------------------indice : on recherche la valeur hires_3 qui n'est pas définie dans robody_traj_2
III.3. Linking failed for VIEW="xxx"
-------------------------------------------------------------------------
ADDVIEWDB("robody_tc") : total#, dbhandle, viewhandle = 13 1 19882
*** Error in routine "ODB_addview"
Linking failed for VIEW="robody"
-------------------------------------------------------------------------indices : la vue robody n'est pas définie
vérifier la compilation de la requête robody.sql
et l'existence de XCMA_robody.o dans la lib correspondante
vérifier la mise à jour du fichier xCMA_Sstatic.c et sa compilation
le fichier doit contenir les référence de la vue recherchée
III.4. Unable to obtain context id for "xxx"
-------------------------------------------------------------------------
1 : "ECMA" : LSCREEN, LTOVSCV, NUPTRA, NRESUPD, NCONF= F T 1 3 1
1 : DELAYED_INIT() : "BLACK", version= 1
1: MOBPNT : 0 0
1: MLNSET : 323 323
1: MMXBDY : 323 323
1: MTYPOB : 323 323
1: MABNOB : 0 0 0
1: MAPOMM : 124533 124533
*** Error in routine "GETDB"
Unable to obtain context id for "BLACK"
Message code = 1
-------------------------------------------------------------------------indice : Vérifier dans ctxinitdb.F90 la définition du contexte,
et si elle existe si elle n'est pas sous une clé
III.5. undeclared identifier `K1_len`
-------------------------------------------------------------------------
error : undeclared identifier `K1_len` à la compilation d'un *.sql
-------------------------------------------------------------------------indice : Vérifier les tables du FROM Pb avec les liens
IV.2. Run sur une base de cycle différent
principe de base : nouveaux ${base}.o ${base}_T_${table}.o
recompilation des requêtes sql
édition de liensnouveaux ${base}.o ${base}_T_${table}.o ${base}.h
* procédure ~mrpa660/uti/env_odb
le cycle odb est précisé en tête de procédure
le cycle de la base est donné en argument ex: 23R4 cyclbase
{base}.h et les points objets (${cyclbase}.LIBodb.a) sont archivés sous
ODB_${cyclodb} andante /utemp/mrpa/mrpa660/EXEC
kami ~mrpa660/util
remarque : le répertoire ODB_${cyclodb} a été initialement crée et contient les ${cyclbase}.${base}.sch
* principe pour chaque type de base (CCMA, ECMA, ECMASCR)
cp ${base}.sch ${base}.ddl récupération du "format" de la base à lire
${ODB_cyclodb}/bintmp/odb98.x -c -I${ODB_cyclodb}/include -V -O3 -DCANARI ${base}.ddl
* remarque : les procédures sql de mandaodb sont également recompilées
les points objets sont archivés dans ${cyclbase}.LIBloc.acompilation des requêtes sql
cp ${base}.sch ${base}.ddl
cp ${base}.sch ${base}.ddl_
cp .../ODB_${cyclodb}/${cyclbase}.${base}.h ${base}.h
${ODB_cyclodb}/bintmp/odb98.x -c -I${ODB_cyclodb}/include -V -O3 -DCANARI -l ${base} -i -s -w ${file.sql}édition de liens
utiliser la(ou les) bibliothèque(s) prédéfinies
* Utilisation de MLNKH2B
-> définition de MOBHDR et MOBODY dans ctxinitdb.F90
-> valeurs integer en premier dans la requete* Update sur MOBHDR (ou MOB*)
-> spécifier l'update dans ctxinitdb.F90 à la fois sur ROBHDR et MOBHDR* Valeur manquante $MDI = 2147483647 mdi.inc (odb)