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

File 如何在Informix中打开和读取文件,file,informix,File,Informix,我需要编写一个存储过程,从包含员工记录(多行)的文本文件中读取输入,并将这些值与员工表中的值进行比较,如果有任何修改,则编辑员工表中的行。我正在使用连接类型为Informix的工具。由于我是Informix新手,我不知道如何开始 情况是: 我有一个Employee表,其中包含emp\u no、dept\u no、fname、lname、crp\u id、sal、hours等字段。 我在“C:\sample.txt”中有一个包含数据的文本文件 111 222 fname lname 3456 1

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

情况是:

我有一个Employee表,其中包含emp\u no、dept\u no、fname、lname、crp\u 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”,我需要更新它。顺便说一句,我读取的是文本文件,而不是外部表。

假设您使用的是足够新的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是不必要的(但为什么?)。但总的来说,您的数据库应该被记录下来。您可以将提交放在删除之后;如果您有一个模式ANSI数据库,则可能需要在删除后再次提交


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

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


我相信这也会让你感到困惑;您对Informix不太熟悉,也不太清楚自己拥有什么和正在使用什么。I4GL根本不使用JDBC;它构建在Informix ESQL/C之上。使用普通ESQL/C是另一种选择,但只适用于像我这样的受虐狂(已经使用它很多年了)。即使如此,我仍然希望使用createexternaltable和MERGE。

欢迎使用stackoverflow。请尽快阅读这一页。我们需要更多的信息才能提供更多的帮助。例如,文本文件中有什么?需要与数据库中某个表的文本或CLOB列中存储的数据进行比较的单个数据块?或者卸载表中多行的数据,这些数据需要加载到数据库中,以便生成的表可以与另一个表进行比较?还是别的什么?您正在使用哪个版本的Informix,在哪个系统上?哪些编程语言是一种选择?请在问题中编辑您的评论;您可以在那里获得完整的格式选项,这将使每个人都更容易阅读。谢谢。让我给你解释清楚。我没有使用Informix工具。我使用连接类型为informix的DB Visualizer和JDBC informix驱动程序。因此,我假设应该用Informix语言(另一种语言,如SQL、Oracle)编写脚本。现在,我的要求不是从外部表中读取,而是从文本文件中逐行读取记录,将字段与现有表中的字段进行比较。首先,我想打开文件&我使用了“从“C:\sample.txt”选项(READ,FORMAT=“CSV”)打开文件fd1”,但它给了我一个错误。你能告诉我如何打开一个文本文件plz。合并命令可以为你“做编辑”。请在问题中澄清你的问题(但发表评论让我知道你已经这样做了)。我不清楚DB Visualizer是什么。我不知道你认为哪种语言有打开文件的命令;看起来可能是Informix-4GL,但我怀疑不是。原始Informix服务器没有OPEN FILE语句(请参阅信息中心的手册)。目前,你我之间完全脱节了——我们没有共识。我仍然认为创建外部表和合并是一个好主意,但一些示例数据可能会有所帮助。对不起。我不熟悉stackoverflow,不知道所有的规则。对开放状态来自Informix 4GL。我不知道4GL和原始Informix之间的区别。场景是:我在“C:\sample.txt”中有一个文本文件,其中包含数据111 222 fname lname 3456 hanks,John。我认为创建一个Ext表是一个好主意。如果存在可合并的_数据,我尝试使用DROP TABLE;使用(数据文件('DISK:\C:\sample.txt'),格式为'DELIMITED',豪华版),创建外部表可合并_数据(column1 VARCHAR(15));它确实创建了表,但当我从可合并的_数据中选择*时,它给出了[错误代码:-26154,SQL状态:IX000]无法打开文件:(文件,errno)=(\C\sample.txt,2)。你知道问题出在哪里吗?我也尝试过从“c:\sample.txt”插入到test_表中;但它给了我一个语法错误