- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要编写一个存储过程,它从包含员工记录(多行)的文本文件中读取输入,并将这些值与员工表中的值进行比较,如果有任何修改,则编辑员工表中的行。我正在使用连接类型为 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/
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我必须做一个大的更新脚本 - 而不是 SPL(存储过程)。它是为 Informix 数据库编写的。 它涉及将行插入到多个表中,每个表都依赖于前一个表的插入顺序。 我知道我可以通过这样做来访问该序列:
我在 Informix DB 的表中有大约 300 万行。 在加载新数据之前,我们必须删除它。 它在其中一列上有一个主键。 为了删除相同的内容,我想到了使用 rowid 。但是当我尝试 select
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我想在 informix 数据库表中选择列时使用列别名。例如在以下查询中: SELECT hire_dt as "Hire Date" FROM employee 列 Hire_dt 应显示为雇用日期
我必须将我的应用程序连接到客户的 Informix 7.2 旧数据库。 据我所知,理论上应该有一个数据库服务在端口50000上运行。问题是我在操作系统中找不到任何数据库服务。 到目前为止,我只能使用
在 Informix 存储过程中,我有一些情况是这样的:- If val1 > 0 // 1st If Select count(*) of v
我正在将一些 informix SQL 转换为 SQL Server。 下面的查询中的方括号是什么意思? SELECT unique cl_name[1,5] FROM client cl_name
我有一台服务器,并且我知道上面安装了 Informix,但我不知道是谁安装的。有一个闭源客户端连接到该服务器,但除了用户名和密码之外我无法获取任何有关它的信息。我不知道如何连接它,我不知道它的端口号和
在 Informix 存储过程中,我有一些情况是这样的:- If val1 > 0 // 1st If Select count(*) of v
我正在将一些 informix SQL 转换为 SQL Server。 下面的查询中的方括号是什么意思? SELECT unique cl_name[1,5] FROM client cl_name
我是 Informix-SQL 新手。我正在尝试在 Informix 中创建表单。我提到了some resources online 这就是我现在访问数据库的方式dbaccess database_n
是否有引用文档列出 4GL 实际使用的所有功能代码(理想情况下,所有出现在随 4GL RDS 提供的 termcap 中的代码)? 例如: gs - start graphics mode (box-
在 Informix SPL 例程中执行与传统 sleep() 系统调用语义等效的最佳方法是什么?换句话说,只需“暂停” N 秒(或毫秒或其他什么,但几秒就可以了)。我正在寻找一种解决方案,它不涉及将
在 Informix 中将 varchar 类型转换为 Int 类型时遇到问题。 实际上我不知道该值是否真的是 varchar 或不是我想转换为 INT 的值。这是一个沙盒系统。 例如: 我正在尝试运
我想知道是否可以像在 MS SQL 中一样在 Informix 中选择每个第 n 行?! 就像是 SELECT * FROM order by ASC limit 1 OFFSET 4 只是没有用
我在我维护的一些代码中发现他们使用这种格式进行更新查询 UPDATE X=to_date('$var','%iY-%m-%d %H:%M:%S.%F3') ... 但我无法在 Informix 文档中
我已经为 Informix 数据库(版本 IBM Informix Dynamic Server 版本 14.10.FC10AEE)创建了一条插入语句。 这看起来如下: INSERT INTO per
我们的 Solaris 服务器上运行着 Informix,在 /usr/informix/bin 下有几个可执行文件,例如 'dbaccess' 和 'isql' . 例如,当输入“isql -V”时
假设我有以下查询: insert into myTable values ("TEST 1 TEST 2") 然后我选择要输出到 Excel 工作表的描述: select description fr
我是一名优秀的程序员,十分优秀!