INFORMIX:如何将查询结果存储到变量中并将其作为字符串回显到系统?

INFORMIX: How can I store query result into a variable and echo it to the system as a string?

是否可以在 Informix 存储过程中执行类似的操作:

DEFINE my_data VARCHAR(255);
LET meta = (select count(*), something  from tab11);
SYSTEM 'echo '|| meta;

您使用 INTO 子句捕获输出并将 SELECT 包装在 FOREACH 中。这一次获取一行数据,并且您 select 的每一列都需要单独的变量。然后您可以将它们操作成更大的字符串。

然后您可以使用 SYSTEM

但是,echo 的输出将被发送到 /dev/null(或 NUL:)。如果那是你想要的,那很好——但是为什么呢?如果没有,您需要自己组织重定向到其他地方。

CREATE PROCEDURE echo(str VARCHAR(200) DEFAULT 'hello world');
    DEFINE cmd VARCHAR(255);
    LET cmd = "echo " || str || " >>/Users/jleffler/tmp/arcana.out";
    SYSTEM cmd;
END PROCEDURE;
EXECUTE PROCEDURE echo();
EXECUTE PROCEDURE echo("The world is your oyster");
DROP PROCEDURE echo;

您需要调整文件名以适合您的目的 — 很有可能您的机器上没有我的主目录。

示例输出文件:

hello world
The world is your oyster

指向文件的文件和目录的权限:

         2 drwxr-xr-x     root    wheel 2017-05-24 17:17:16 /
    169236 drwxr-xr-x     root    admin 2016-09-20 12:46:37 /Users
    609973 drwxr-xr-x jleffler    staff 2017-05-24 17:18:45 /Users/jleffler
   1670154 drwxr-xr-x jleffler    staff 2017-05-24 17:19:02 /Users/jleffler/tmp
  63140467 -rw-r--r-- jleffler    staff 2017-05-24 17:19:02 /Users/jleffler/tmp/arcana.out

同意@Jonathan Leffler 上面提到的一切。这是另一个示例,其中 select 语句 returns 是一个类似于您在问题中显示的整数值。

create procedure test(); 
DEFINE my_data int;
LET my_data = (select count(*) from systables);
system 'echo ' || my_data || ' > /tmp/my_data';
end procedure;
execute procedure test();

在我的测试系统中,select语句的输出

select count(*) from systables;

  (count(*)) 
         113

1 row(s) retrieved.

当我执行程序时,系统语句的结果是文件/tmp/my_data。

cat /tmp/my_data
113

总之,你想做的事情肯定是可以实现的。但是,根据 select 语句的结果集,您可能需要在存储过程中进行更复杂的处理。