gpt4 book ai didi

file - 如何在 Informix 中打开和读取文件

转载 作者:行者123 更新时间:2023-12-02 00:02:12 25 4
gpt4 key购买 nike

我需要编写一个存储过程,它从包含员工记录(多行)的文本文件中读取输入,并将这些值与员工表中的值进行比较,如果有任何修改,则编辑员工表中的行。我正在使用连接类型为 Informix 的 DB Visualizer 工具。由于我是 Informix 的新手,我不知道如何开始。

场景是:

我有一个 Employee 表,其中包含字段 emp_no、dept_no、fname、lname、crp_id、sal、hours 等。我在“C:\sample.txt”中有一个包含数据的文本文件

111  222 fname lname 3456
112 223 fname2 lname2 3457..

我需要读取文本文件的第一行,获取 emp_no(111) 并从 emp 表中获取特定记录。现在,检查其他字段并在必要时进行修改。例如,如果 emp 表中 emp 111 的名字是“fname1”而不是“fname”,我需要更新它。顺便说一句,它来 self 正在读取的文本文件,而不是来自外部表。

最佳答案

假设您使用的是足够新的 Informix 版本(12.10 或 11.70),那么您可能应该将文件映射到外部表,然后使用 MERGE 命令合并更新和插入(并且可能删除)从外部表到新表。理论上,这大约是 5 个 SQL 命令:

BEGIN WORK;
CREATE EXTERNAL TABLE mergeable_data (...) ...;
MERGE ... YourMainTable ... FROM mergeable_data
ON MATCH UPDATE ...
ON NO MATCH INSERT ...; -- Check the syntax; I'm inventing on the fly!
COMMIT WORK;
DROP TABLE mergeable_data;

如果您有一个未记录的数据库,则 BEGIN 和 COMMIT 不是必需的(但为什么呢?)。总的来说,您的数据库应该被记录下来。您可以将 COMMIT 放在 DROP 之后;如果您有 MODE ANSI 数据库,则在 DROP 之后可能需要另一个 COMMIT。


考虑到问题中现在的额外信息,我比以往任何时候都更加确信使用 CREATE EXTERNAL TABLE 将磁盘上的文件指定为数据源,而 MERGE 语句正是您所需要的。 CREATE EXTERNAL TABLE 语句允许 IDS 将文件视为表。 MERGE 语句自动(您无需编程)执行诸如“更新名字,因为它不同”之类的操作。

如果你愿意,你可以用另一种方式来做——做我的客人。您使用的是 Informix 4GL (I4GL) 还是其他语言? I4GL 是一个必须购买的单独产品,它创建针对数据库运行的编译程序。我不知道 DB Visualizer 如何适合该系统。如果您使用 I4GL,您可以创建临时表,然后(可能)将数据加载到其中,然后进行匹配工作。或者您可以在 SQL ... END SQL block 中使用 CREATE EXTERNAL TABLE 和 MERGE。

我相信这也让您感到困惑;您对 Informix 不是很熟悉,也不太确定自己拥有什么以及正在使用什么。 I4GL 根本不使用 JDBC;它建立在 Informix ESQL/C 之上。使用普通的 ESQL/C 是另一种选择,但仅适用于像我这样的受虐狂(他们已经使用它好几代了)。即便如此,我仍然希望使用 CREATE EXTERNAL TABLE 和 MERGE。

关于file - 如何在 Informix 中打开和读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20663446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com