Миграция Informix ESQLC в Oracle Pro * C - PullRequest
1 голос
/ 22 апреля 2009

В настоящее время поручено перенести файлы Informix ESQLC в Oracle Pro * C и задать несколько вопросов. Во-первых, мы используем множество проприетарных функций Informix во встроенном коде ESQLC, таких как rstrdate(), rtoday() и rjulmdy().

Любые указатели о том, как преобразовать их в Oracle Pro * C?

Еще одна вещь, с которой я борюсь с пониманием, это тип данных Oracle. В Informix мы используем тип long во встроенном коде sql C для любых переменных хоста, связанных с датами для таблиц Informix.

Но в Oracle у меня сложилось впечатление, что даты не передаются взад-вперед так долго, а как char? Или мы все еще можем указывать переменные хоста как тип long?

Ответы [ 2 ]

0 голосов
/ 05 мая 2009

Просто чтобы добавить вышеизложенное, я создал метод для дублирования проприетарной функции Informix rtoday ():

    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;
}
0 голосов
/ 22 апреля 2009

Google "Oracle OCI Date" предлагает такие функции, как OCIDateTimeFromText(), OCIDateSysdate() и, возможно, OCIDateTimeToArray(), соответствующие названным вами функциям ESQL / C. Существует тип OCIDate, который, вероятно, больше соответствует ESQL / C dtime_t (он, вероятно, включает компоненты времени), чем Informix DATE (int4 или long в ESQL / C), но, скорее всего, это тип, который вы следует использовать в процессе перевода.

...