将Informix ESQLC迁移到Oracle Pro * C.

时间:2009-04-22 13:48:21

标签: oracle informix embedded-sql

目前负责将Informix ESQLC文件迁移到Oracle Pro * C并提出一些问题。首先,我们在嵌入式ESQLC代码中使用了许多专有的Informix函数,例如rstrdate()rtoday()rjulmdy()

有关如何在Oracle Pro * C中转换这些内容的任何指示?

我正在努力理解的另一件事是Oracle日期数据类型。在Informix中,我们在嵌入式sql C代码中使用long类型来处理任何处理Informix表日期的主机变量。

但是在Oracle中,我的印象是日期不是来回传递的,而是作为char?或者我们仍然可以将主变量指定为long类型吗?

2 个答案:

答案 0 :(得分:0)

谷歌搜索“Oracle OCI日期”提供了与您命名的ESQL / C函数相对应的OCIDateTimeFromText()OCIDateSysdate()OCIDateTimeToArray()等函数。有一个OCIDate类型可能更接近于ESQL / C dtime_t(它可能包括时间组件)而不是Informix DATE(int4或ESQL / C中的long),但它最多可能是您在翻译过程中应该使用的类型。

答案 1 :(得分:0)

为了补充上述内容,我创建了一个复制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;
}