我正在编写一个Informix程序。 我创建了一个临时表,但我想在文本文档中导出这些数据。 我不能在SPL中使用UNLOAD语句;有人能帮助我吗?
答案 0 :(得分:3)
服务器无法识别UNLOAD语句。 DB-Access,ISQL和I4GL等程序识别它并将其模拟为一个语句(当然,作为SELECT,当然,从服务器读取数据并将其写入客户端上的文件)。因此,该语句不能在SPL - 存储过程语言中工作 - 因为它由服务器上的服务器运行。 (断开连接的一个原因是服务器无法直接写入客户端上的文件。)
所以,你需要以不同的方式做事。 Ricardo Henriques在answer中建议的解决方案是完全合理的,只要在服务器上创建的文件正常即可。
答案 1 :(得分:1)
您是在 Informix Server 还是客户端上执行它?哪个是 IDS 版本?
以下是使用external tables的方法,该文件存储在服务器主机上:
CREATE PROCEDURE sp_unload()
CREATE TEMP TABLE temp1(
col1 INT
) WITH NO LOG;
INSERT INTO temp1 VALUES (1);
INSERT INTO temp1 VALUES (2);
INSERT INTO temp1 VALUES (3);
CREATE EXTERNAL TABLE temp1_ext
SAMEAS temp1
USING (
DATAFILES ("DISK:/home/informix/temp.dat")
);
INSERT INTO temp1_ext SELECT * FROM temp1;
DROP TABLE temp1_ext;
DROP TABLE temp1;
END PROCEDURE;
如果您要查看要存储在客户端服务器上的内容,则必须提供您使用的客户端类型(操作系统以及您连接到 IDS的方式强>)。
如果您使用 dbaccess ,则可以使用 SP 创建临时表,并在提交数据的unload
之后。
如果使用其他客户可能最好的选择是将 SP 重写为function that returns more than one value from more than one row.。
然后,迭代它并写入文件。