您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

提取限制

功能限制影响数据提取功能。

  • 只能对 IQ 存储库中存储的数据执行提取操作。

  • 无法对系统表或跨数据库连接进行提取。

  • 对于使用用户定义函数或除 suser_id() 和 suser_name() 以外的系统函数的查询,不能使用提取功能。

  • 要精确地重新生成浮点数据,请使用二进制选项。

  • 目前不支持磁带设备。

  • 如果运行带有 -q(安静模式)选项的 dbisql (Interactive SQL),并且数据提取命令位于命令文件中,则必须先设置 dbisql 选项“显示多个结果集”并使该选项永久有效。如果未设置此选项,则不会创建输出文件。 要设置“显示多个结果集”选项,请在 dbisql 窗口中单击“工具” “选项”,然后选择“显示多个结果集”并单击“设为永久”。

  • 以下是适用于 varchar 和 varbinary 数据的缺省行为: 二进制 LOAD TABLE 始终会剪裁 VARCHAR 数据中的空白。如果您具有包含尾随空白的 varchar 数据,则在二进制装载插入时不会保留它们。 在提取期间,尾随零会填补到 varbinary 数据中。例如,在提取期间,将用零填补一个声明为 varbinary(6) 且包含数据 0x1234 的字段,提取后,该字段将作为 0x123400 进行装载。 要更改这些缺省行为,请使用 TEMP_EXTRACT_LENGTH_PREFIX 选项提取数据以及 LOAD TABLE 语句中的 PREFIX BINARY 装载列说明。

  • 二进制 LOAD TABLE 始终会剪裁 VARCHAR 数据中的空白。如果您具有包含尾随空白的 varchar 数据,则在二进制装载插入时不会保留它们。

  • 在提取期间,尾随零会填补到 varbinary 数据中。例如,在提取期间,将用零填补一个声明为 varbinary(6) 且包含数据 0x1234 的字段,提取后,该字段将作为 0x123400 进行装载。

    设置 TEMP_EXTRACT_NAME1 时,无法执行 INSERT...SELECT

    事件不支持执行将返回结果集的语句。服务器日志会返回类似下面的错误:

    Handler for event 'test_ev' caused SQLSTATE '09W03'
    

    Result set not permitted in 'test_ev'

    为了通过事件执行查询,请创建一个调用存储过程的事件,然后将存储过程结果插入到临时表中。如果使用提取,则临时表始终为空并且需要的开销很少。

    例如:

    CREATE PROCEDURE proc1()
    

    BEGIN

    SET TEMPORARY OPTION temp_extract_name1 = 'testproc.out';

    SELECT * FROM iq_table;

    END;

    CREATE EVENT "test_ev" ENABLE HANDLER

    BEGIN

    SELECT * INTO #tmp FROM proc1();

    END;

    TRIGGER EVENT test_ev;