Newsgroup: it.comp.software.database
Titolo: Oracle in c

Salve a tutti,
ho questo pezzo di codice in c
{
 struct sqlexd sqlstm;
 syslog(LOG_DEBUG,"Preparazione statement\n");
 sqlstm.sqlvsn = 10;
 sqlstm.arrsiz = 4;
 sqlstm.sqladtp = &sqladt;
 sqlstm.sqltdsp = &sqltds;
 sqlstm.stmt = "select notizie_seq.nextval  ,to_char(to_date(:b0,'DD-
MON-RR HH24:MI'),'YYYYMMDDHH24MI') into :b1,:b2  from dual ";
 sqlstm.iters = (unsigned int  )1;
 sqlstm.offset = (unsigned int  )70;
 sqlstm.selerr = (unsigned short)1;
 sqlstm.cud = sqlcud0;
 sqlstm.sqlest = (unsigned char  *)&sqlca;
 sqlstm.sqlety = (unsigned short)256;
 sqlstm.occurs = (unsigned int  )0;
 sqlstm.sqhstv[0] = (unsigned char  *)(rec_insert.data_notizia);
 sqlstm.sqhstl[0] = (unsigned long )0;
 sqlstm.sqhsts[0] = (         int  )0;
 sqlstm.sqindv[0] = (         short *)0;
 sqlstm.sqinds[0] = (         int  )0;
 sqlstm.sqharm[0] = (unsigned long )0;
 sqlstm.sqadto[0] = (unsigned short )0;
 sqlstm.sqtdso[0] = (unsigned short )0;
 sqlstm.sqhstv[1] = (unsigned char  *)id_notizia;
 sqlstm.sqhstl[1] = (unsigned long )8;
 sqlstm.sqhsts[1] = (         int  )0;
 sqlstm.sqindv[1] = (         short *)0;
 sqlstm.sqinds[1] = (         int  )0;
 sqlstm.sqharm[1] = (unsigned long )0;
 sqlstm.sqadto[1] = (unsigned short )0;
 sqlstm.sqtdso[1] = (unsigned short )0;
 sqlstm.sqhstv[2] = (unsigned char  *)data_notizia;
 sqlstm.sqhstl[2] = (unsigned long )13;
 sqlstm.sqhsts[2] = (         int  )0;
 sqlstm.sqindv[2] = (         short *)0;
 sqlstm.sqinds[2] = (         int  )0;
 sqlstm.sqharm[2] = (unsigned long )0;
 sqlstm.sqadto[2] = (unsigned short )0;
 sqlstm.sqtdso[2] = (unsigned short )0;
 sqlstm.sqphsv = sqlstm.sqhstv;
 sqlstm.sqphsl = sqlstm.sqhstl;
 sqlstm.sqphss = sqlstm.sqhsts;
 sqlstm.sqpind = sqlstm.sqindv;
 sqlstm.sqpins = sqlstm.sqinds;
 sqlstm.sqparm = sqlstm.sqharm;
 sqlstm.sqparc = sqlstm.sqharc;
 sqlstm.sqpadto = sqlstm.sqadto;
 sqlstm.sqptdso = sqlstm.sqtdso;
 sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
l'esecuzione della query mi genera questo errore:
ORA-01455: converting column overflows integer datatype
la piattaforma è ORacle9i su SunFire.
Quale puo' essere il problema? E come risolvero? Eventuali link.....
Grazie 1000,
ciao Renato
--
Ciao e buon lavoro,
   Renato
---- 
Renato Eschini 
Inera srl 
Via Vespucci 41 
56100 Pisa 
Tel:         (+39) (0)50 2201218 
WWW:         
http://www.inera.it
Inviato da 
www.mynewsgate.net


:Provate a guardare gli ingredienti del famoso Labello che si usa per
:le labbra screpolate: Butirrospermum Parkii (sperma di maiale).

 <61...@mynewsgate.ned.invalid> wrote:
Ciao leonardo, ti ringrazio, ma come puoi vedere nn sto inserendo nulla 
nel db, faccio solo una select su dual per ottenre una sequence una 
conversione di data.
Se il problema esiste &egrave; sul tipo di dato usato in c per ottenre i 
risultati, ma ne ho gia provati un miliardo!!!!!
Ciao e grazie, altre ipotesi sono supreveryaccepted !!!


conversione di data.
Appunto. Ma quei dati, estratti dal database, entrano da qualche parte.
<cazzate>
Ripeto, non conosco Oracle ne' la sua interfaccia in C e quindi vado ad
occhio, ma considera queste righe:
 sqlstm.sqhstl[0] = (unsigned long )0;
 sqlstm.sqhsts[0] = (         int  )0;
 sqlstm.sqindv[0] = (         short *)0;
 sqlstm.sqinds[0] = (         int  )0;
..."sqhstl" e' un unsigned long, sqhsts un signed int, e sqindv punta a
quello che altrove e' considerato stringa.
Mi sembra il metodo che qualcuno potrebbe usare per dire all'API cosa e
dove mettere.
In questo caso mi sembra strano che ci sia un indice 0 che punta a NULL
(a meno che :b1 e :b2 non siano gli indici, e in 0 ci vada :b0, che non
e' usato?).
Ma soprattutto mi viene il dubbio che un integer sia dichiarato largo 8
byte. In 8 byte (cioe' 7 cifre e uno zero, visto che [2] e' largo 13 ed
il suo formato contiene 12 caratteri), ci stanno numeri fino a 9999999,
ma un campo SEQUENCE dovrebbe arrivare a circa 1E+10.
</cazzate>
Che succede se lasci i tipi come stanno, ma cambi la riga in
	sqlstm.sqhstl[1] = (unsigned long ) 12;
(e ovviamente dichiari id_notizia come largo 13 caratteri almeno)?


 Leonardo
Ok, grazie 1000!!!! Il problema era + o - quello :D
