在Informix存储过程中使用UNLOAD语句

时间:2015-08-13 15:21:50

标签: stored-procedures informix

我正在编写一个Informix程序。 我创建了一个临时表,但我想在文本文档中导出这些数据。 我不能在SPL中使用UNLOAD语句;有人能帮助我吗?

2 个答案:

答案 0 :(得分:3)

服务器无法识别UNLOAD语句。 DB-Access,ISQL和I4GL等程序识别它并将其模拟为一个语句(当然,作为SELECT,当然,从服务器读取数据并将其写入客户端上的文件)。因此,该语句不能在SPL - 存储过程语言中工作 - 因为它由服务器上的服务器运行。 (断开连接的一个原因是服务器无法直接写入客户端上的文件。)

所以,你需要以不同的方式做事。 Ricardo Henriquesanswer中建议的解决方案是完全合理的,只要在服务器上创建的文件正常即可。

答案 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.

然后,迭代它并写入文件。