将 Informix ESQLC 迁移到 Oracle Pro*C

Posted

技术标签:

【中文标题】将 Informix ESQLC 迁移到 Oracle Pro*C【英文标题】:Migrating Informix ESQLC to Oracle Pro*C 【发布时间】:2009-04-22 13:48:21 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢乔纳森。我要做更多的研究,但这绝对不是在公园里散步。从我读到的很少内容来看,实现 OCI 功能在 Informix 到 Oracle 的迁移中引入了比我希望的更多的手动工作。事实是,我们只处理 C 代码中日期的 long 数据类型,因为这就是 Informix 的运作方式。但是现在有了 Oracle,我假设我们将从数据库中提取所有日期作为 char/string 进行操作?【参考方案2】:

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

【讨论】:

以上是关于将 Informix ESQLC 迁移到 Oracle Pro*C的主要内容,如果未能解决你的问题,请参考以下文章

Informix 到 Oracle:处理获取空值

在不同 DBMS 之间传输数据

启用对 Informix v2.0 的网络访问

如何在 Windows 中为 PHP 7 安装 PDO 驱动程序 Informix

将日期时间值插入到 informix 表中失败

Informix:如何将单个参数中的多个值传递、使用和执行到存储过程