1

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

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

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

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

4

2 回答 2

0

谷歌搜索“Oracle OCI 日期”会出现诸如 之类的函数OCIDateTimeFromText()OCIDateSysdate()并且可能OCIDateTimeToArray()对应于您命名的 ESQL/C 函数。有一种OCIDate类型可能比 Informix DATE(ESQL/C 中的 int4 或 long)更接近于 ESQL/C dtime_t(它可能包括时间组件),但它很可能是您应该在翻译中使用的类型过程。

于 2009-04-22T19:52:41.363 回答
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;
}
于 2009-05-05T14:02:59.913 回答