command-line - 远程 Informix 11.5 命令行客户端

标签 command-line informix sqlcmd

Informix 11.5 是否附带了与 SQL Server 的 SQLCMD 类似的命令行工具?

如果是,如何连接到远程服务器并使用它执行常规 SELECT/INSERT/UPDATE 查询?

最佳答案

正如 Michal Niklas 所说,IBM Informix Dynamic Server(通俗地称为 IDS,甚至只是 Informix)提供的标准工具是 DB-Access。但是,它仅与 IDS 本身一起分发,而不与 Informix Client SDK (CSDK) 或 Informix Connect (I-Connect) 产品一起分发。

如果您想从未安装 IDS 的计算机访问 IDS,则需要计算机上的 CSDK 或 I-Connect,以及一些其他软件 - 可能是原始版本(早于 Microsoft 十多年)的SQLCMD 。这就是我使用的——并且在过去二十二年左右的时间里用过各种版本(咳嗽、噼啪、哎哟);我编写它是因为我不喜欢名为 isql(Informix SQL 产品的一部分)的程序的命令行行为,该程序是 DB-Access 的前身。 (很多历史 - 对你来说不太重要。)

用法 - SQLCMD 有更多的选项,超出您的想象。不过,基础知识很简单:

 sqlcmd -d dbname@dbserver -e 'select * from table' -x -f file.sql

这将连接到 sqlhosts 文件(通常为 $INFORMIXDIR/etc/sqlhosts)中指定的名为“dbserver”的数据库服务器上名为“dbname”的数据库。 '-e' 表示 SQL 表达式 - select 语句;结果将以严格的格式(Informix UNLOAD 格式)打印到标准输出,每条记录一个逻辑行。 '-x' 打开跟踪模式; “-f”选项表示读取指定文件以获取更多命令。 “.sql”扩展名不是强制性的(请注意:DB-Access 需要“.sql”扩展名,我们会为您添加)。 (不以“-e”或“-f”为前缀的参数将被启发式解释;如果包含空格,则为 SQL;如果不包含空格,则为文件名。)“-H”选项打印列标题(标签) ) 在结果集之前; “-T”选项打印列类型(标题之后,结果之前)。 '-B'选项在基准模式下运行;它打开跟踪,打印语句、语句开始的时间以及花费的时间。 (如果 SQL 需要很长时间才能运行,那么了解语句何时开始会很有帮助 - 就像在基准测试场景中一样)。对输出格式(包括 CSV 甚至 XML 变体 - 但不包括使用命名空间的 XML)和日期格式等进行控制。有“内置”命令来重定向输入、输出和错误;大多数命令行选项也可以在解释器等中使用。SQLCMD还提供了历史记录机制;它保存 SQL 语句,您可以查看、编辑或重新运行它们。与输出重定向结合使用,您可以保存执行的语句列表等。

SQLCMD 的唯一问题是它当前尚未移植到 Windows。大约六七年前,它曾在 Windows 上运行过。从那时起,微软的编译器对非 MS API 函数变得焦躁不安,坚持认为即使我按名称请求它们(通过请求 POSIX 功能),这些函数也必须以下划线为前缀,并且弃用了一堆可以如果你注意你正在做的事情,就可以安全地使用(但是,遗憾的是,可能会被那些不注意的人滥用,而且周围似乎有更多不专心的程序员) - 我的意思是像 'strcpy() 这样的函数' 如果您在调用之前知道源字符串和目标字符串的大小,则可以完全安全地使用它。它在我要做的事情 list 上 - 只是还没有完成,因为这不是我的渴望。

还有另一个开源工具,名为 SQSL您可以考虑。它比 SQLCMD(条件逻辑等)有一些优势,但我认为 SQLCMD 比 SQSL 有一些优势。

您还可以考虑 Perl + DBI + DBD::Informix + dbish 是否适合您。

关于command-line - 远程 Informix 11.5 命令行客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1803392/

相关文章:

haskell - Haskell 书中的编程部分代码无法正常工作

sql - 插入语句中带有jQuery的sqlcmd

java - 使用 sqlcmd 和 Java 在 SQL Server 中抑制 "X rows affected"

command-line - Mercurial:命令行上的多行提交消息?

bash - case 语句中的变量赋值 (bash)

windows - 用于比较两个文件列表并删除两个列表中显示的文件的命令行

database - 用于删除 IBM Informix 中表的前 100 行的数据库查询

c# - 我应该选择哪种 RDBMS 和开发工具来重写基于字符的应用程序?

java - getGenerateKeys 返回一个空的 ResultSet