Migrazione Informix ESQLC ad Oracle Pro * C
-
13-09-2019 - |
Domanda
Al momento il compito di migrazione dei file Informix ESQLC ad Oracle Pro * C e avere un paio di domande. In primo luogo, usiamo un sacco di funzioni proprietarie Informix nel nostro codice ESQLC embedded come rstrdate()
, rtoday()
e rjulmdy()
.
Le eventuali indicazioni su come convertire questi in Oracle Pro * C?
Un'altra cosa sto lottando con la comprensione è la data di Oracle tipo di dati. In Informix, usiamo tipo lungo nel nostro codice embedded sql C per le variabili host che fare con le date per le tabelle Informix.
Ma in Oracle, sono sotto l'impressione che le date non vengono comunicate avanti e indietro tutto il tempo, ma come char? O possiamo ancora indicare le variabili host come tipo lungo?
Soluzione
Googling "Oracle OCI Data" esce con funzioni quali OCIDateTimeFromText()
, OCIDateSysdate()
e forse OCIDateTimeToArray()
corrispondenti alle funzioni di ESQL / C è il nome. C'è un tipo di OCIDate
che probabilmente corrisponde più da vicino a un dtime_t
ESQL / C (è probabile che include i componenti di tempo) rispetto a una data di Informix (int4 o lunga in ESQL / C), ma è più probabile che il tipo si dovrebbe utilizzare in il processo di traduzione.
Altri suggerimenti
Giusto per aggiungere a quanto sopra, ho creato un metodo per duplicare la funzione Informix rtoday proprietario ():
int rtoday(long *today) {
EXEC SQL BEGIN DECLARE SECTION;
time_t t;
EXEC SQL END DECLARE SECTION;
EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle error\n");
EXEC SQL CONNECT :"user/pass@dbname";
EXEC SQL SELECT (new_time(sysdate,'EDT','GMT') - to_date('31-dec-1899','dd-mon-yyyy')) INTO :t FROM DUAL;
printf( "C Time = %d\n", time(NULL) );
printf( "SQL Time = %d\n", t );
*today=t;
}